gpt4 book ai didi

Android PopupWindow 不关闭

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:34 28 4
gpt4 key购买 nike

我有以下代码创建了一个包含 EditText 的 PopupWindow:

lbs.setOnTouchListener(new OnTouchListener(){

@Override
public boolean onTouch(View v, MotionEvent arg1) {
int pWidth = 100;
int pHeight = 80;
int vHeight = mView.getHeight();
int[] location = new int[2];
v.getLocationOnScreen(location);
final View view = inflater.inflate(R.layout.list_popup, null, false);
final PopupWindow pw = new PopupWindow(view, pWidth, pHeight, false);
pw.setTouchable(true);
//pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setContentView(view);
pw.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-(pWidth/4), location[1]+vHeight);
//final LinearLayout layout = (LinearLayout)view.findViewById(R.id.PopupLayout);

final EditText input = (EditText)view.findViewById(R.id.Input);
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.i("Focus", "Focus Changed");
/*
if (hasFocus) {
InputMethodManager inputMgr = (InputMethodManager)myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
inputMgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
}
*/

}
});
input.setText(lbs.getText().toString());
input.requestFocus();
pw.setOnDismissListener(new OnDismissListener(){

@Override
public void onDismiss() {
parentActivity.changeWeight(getId, Double.parseDouble(input.getText().toString()));
Log.i("View Visibility", "" + view.getVisibility());
}

});

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;
}
});

return true;
}
});

PopupWindows 有一个 setBackGroundDrawable,因此当用户触摸窗口外部时,框应该自动消失。我知道该框正在关闭,因为当我在框外单击时我的 OnDismiss 方法运行,但实际窗口不会消失,直到我在框外触摸两次,因此 onDismiss 运行两次,这是我不能拥有的。我在这里缺少什么?

编辑:我稍微更新了我的代码。如果我不将焦点放在弹出窗口上,除了我无法将焦点放在我的 edittext 之外,一切都会完美无缺。如果我在弹出窗口上执行 setFocusable,那么编辑文本不会立即获得焦点,我必须双击以将其删除。

最佳答案

我认为您可能打开了多个弹出窗口。 onTouch 方法将至少在向下和向上触摸时被调用,并且可能还会有几个触摸移动。尝试检查 (arg1.getAction() == MotionEvent.ACTION_UP) 并仅在那时显示窗口。

关于Android PopupWindow 不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134366/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com