我有一個列表視圖,當用戶按下一個按鈕時,我想收集按鈕的座標並將一個編輯文本放在屏幕上方的頂部。當用戶點擊屏幕上的任何其他位置時,edittext將消失,並且會觸發一種方法,該方法使用用戶輸入框中的數據。我會如何去做這樣的事情?我想要一些類似於QuickActions的東西,但不像侵入式那樣。有人能指出我至少如何去獲得按鈕座標的方向嗎?屏幕上的Android位置元素
5
A
回答
2
好吧,所以這裏是我已經能夠實現我想要做的事情。是否有可能動態地放置PopupWindow而不必惹調整邊距等
public void showPopup(View view, View parentView, final int getId, String getLbs){
int pWidth = 100;
int pHeight = 80;
int vHeight = parentView.getHeight(); //The listview rows height.
int[] location = new int[2];
view.getLocationOnScreen(location);
final View pView = inflater.inflate(R.layout.list_popup, null, false);
final PopupWindow pw = new PopupWindow(pView, pWidth, pHeight, false);
pw.setTouchable(true);
pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.showAtLocation(view, Gravity.NO_GRAVITY, location[0]-(pWidth/4), location[1]+vHeight);
final EditText input = (EditText)pView.findViewById(R.id.Input);
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.i("Focus", "Focus Changed");
if (hasFocus) {
//Shows the keyboard when the EditText is focused.
InputMethodManager inputMgr = (InputMethodManager)RecipeGrainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
inputMgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
}
}
});
input.setText("");
input.requestFocus();
Log.i("Input Has Focus", "" + input.hasFocus());
pw.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss() {
changeWeight(getId, Double.parseDouble(input.getText().toString()));
Log.i("View Dismiss", "View Dismissed");
}
});
pw.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
Log.i("Background", "Back Touched");
pw.dismiss();
return true;
}
return false;
}
});
}
的PWIDTH和pHeight是我選擇了PopupWindow的大小和vHeight是我所收集的主父視圖的高度來自onCreate上下文。請記住,這不是精美的代碼。我仍然需要添加一些東西,比如動畫進出,以及一個漂亮的小箭頭或者什麼東西來顯示窗口的關聯。 setBackgroundDrawable非常重要,如果您不使用它,您將無法在框外單擊以關閉它。
現在,它的奇怪。我必須在框外點擊兩次以關閉窗口。第一次點擊似乎突出了我的文本框,第二次點擊實際上關閉了它。任何人都知道爲什麼會發生這種情況?
1
凌亂,取決於您的視圖層次結構。 getLeft()方法(以及getRight,getTop和getBottom)都與控件的View父級有關。看看getLocationOnScreen,看看它是否做到了你想要的。
相關問題
- 1. [python] [selenium]元素的屏幕位置
- 2. Unity3D中GUI元素的屏幕位置
- 3. 如何在屏幕上定位元素?
- 4. Java圖形元素在屏幕上的確切位置?
- 5. 如何判斷元素在屏幕上的位置
- 6. CSS將元素保持在屏幕上的「固定」位置
- 7. 使用jQuery在屏幕上元素的絕對位置
- 8. 當元素到達屏幕上的位置時觸發事件
- 9. 將屏幕上的彈性元素啓動到位置
- 10. 在屏幕上放置一個元素
- 11. 在Android上獲取主屏幕位置
- 12. 在屏幕上排列元素並保存其位置
- 13. 在屏幕上設置TableView的位置
- 14. 在屏幕中心定位div元素
- 15. Android手機的屏幕位置發現
- 16. 維護屏幕分辨率變化的元素展示位置
- 17. 如何獲取Swing元素的屏幕位置?
- 18. Unity3d。如何獲得UI元素的屏幕或世界位置
- 19. 如何獲取CSS3-3d轉換元素的屏幕位置?
- 20. jquery/Javascript - 捕獲頁面屏幕或元素的位置
- 21. 屏幕上的表面元素
- 22. 對齊屏幕上的UL元素
- 23. 移動屏幕上的固定元素
- 24. 是否可以預測Android中不同屏幕中UI元素的新位置?
- 25. JTextArea將不會「屏幕」到屏幕上的正確位置
- 26. PowerPoint VBA - SlideRange在屏幕上的位置
- 27. jquery - 屏幕左上角的位置
- 28. RecyclerView更改屏幕上的位置
- 29. 在不同屏幕上的div位置
- 30. 檢索屏幕上的UITextField位置
getLocationOnScreen似乎爲我提供了x和y座標。實際上我堅持如何膨脹視圖並將其放置在屏幕上。有任何想法嗎? – ryandlf
這取決於底層的ViewGroup:如果您使用的是LinearLayout或RelativeLayout之類的東西,那麼確實沒有什麼好方法可以做到絕對定位。你可能會嘗試的是在左上角的位置膨脹它,將尺寸設置爲你想要的值,然後根據x和y座標設置邊距以將其移動到位。很亂,但... – Femi
所以沒有setAtThisLocation(x,y)方法,我可以使用on.a視圖對象?我會玩你的想法併發布我的結果。謝謝。 – ryandlf