gpt4 book ai didi

android - 触摸外部后避免 PopupWindow 解雇

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:30 44 4
gpt4 key购买 nike

我想使用具有以下行为/功能的 PopupWindow:

  • 它是可聚焦的(在内部有交互式控件,例如按钮)
  • 弹出窗口“下”的 View 必须正确使用弹出窗口外的触摸
  • .. 但弹出窗口必须保留在屏幕上,即使在点击外部后也是如此

我发现了一堆关于 PopupWindow 的帖子,但没有人问过如何处理这种情况..

我想我尝试了 setOutsideTouchable()、setFocusable()、setTouchable() 的所有可能组合,但我被卡住了。弹出窗口正确处理点击它,但在触摸外部时总是被关闭。

我当前的代码是:

View.OnTouchListener customPopUpTouchListenr = new View.OnTouchListener(){

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
Log.d("POPUP", "Touch false");
return false;
}

};


LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout= (LinearLayout)inflater.inflate(R.layout.insert_point_dialog, null);
PopupWindow pw = new PopupWindow(layout,400,200,true);
pw.setOutsideTouchable(true);
pw.setTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setTouchInterceptor(customPopUpTouchListenr);
pw.showAtLocation(frameLayout, Gravity.BOTTOM, 0, 0);

我的总体目标是创建一个 float 窗口,其行为类似于 gimp 等软件中的“工具选项板”:内部有一些控件,保持在顶部直到被“X”按钮关闭,并允许与外部控件进行交互它..也许有更好的方法来做到这一点,而不是 PopupWindow?但是我还是没有找到更合适的控件。

最佳答案

这里或其他地方的任何建议似乎都不适合我。所以我这样做了:

popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getX() < 0 || motionEvent.getX() > viewWidth) return true;
if (motionEvent.getY() < 0 || motionEvent.getY() > viewHight) return true;

return false;
}
});

如果触摸在 popupWIndow 的边界内,则触摸事件不会被消耗(因此按钮或 ScrollView 将起作用)。如果触摸在边界之外,则触摸会被消耗掉并且不会传递给弹出窗口,因此它不会被取消。

关于android - 触摸外部后避免 PopupWindow 解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406339/

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