我正在尝试制作一个弹出窗口,其中包含文本字段和信息以询问用户,但我想知道如何制作它以便用户可以通过单击主要片段/活动的弹出窗口外部来关闭它是
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tabstudygroups, container, false);
listview = (ListView) rootView.findViewById(R.id.clist2);
addCourseButton = (Button) rootView.findViewById(R.id.caddcoursebutton);
// do stuff here
addCourseButton.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
if(v == addCourseButton) {
View popupView = LayoutInflater.from(getActivity()).inflate(R.layout.popup_layout, null);
final PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
// HERE IS WHAT I THOUGHT WOULD MAKE IT BE ABLE TO ENABLE THE OUTSIDE TOUCH
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(true);
Button btn = (Button) popupView.findViewById(R.id.button);
popupWindow.showAsDropDown(popupView, 0, 0);
}
}
}
答案 0 :(得分:1)
通常,您可以使用对话框和OnCancelListener执行此操作。如果你想要一个弹出窗口的灵活性,你可以通过将其设置在可触摸的外部来获得相同的东西,然后调用setTouchInterceptor来拦截触摸。如果触摸在窗口内,请记住返回false,因此它将沿着触摸链向下移动到实际视图。
答案 1 :(得分:1)
让你的PopupWindow
成为wrap_content并使其可聚焦。
final PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
// HERE IS WHAT I THOUGHT WOULD MAKE IT BE ABLE TO ENABLE THE OUTSIDE TOUCH
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Button btn = (Button) popupView.findViewById(R.id.button);
popupWindow.showAsDropDown(popupView, 0, 0);
答案 2 :(得分:0)
您是否尝试过setCanceledOnTouchOutside
?
答案 3 :(得分:0)
当用户触摸弹出窗口外,您可以使用setCanceledOnTouchOutside(true)来关闭弹出窗口。
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
答案 4 :(得分:0)
让弹出窗口setTouchable为true,并设置setTouchInterceptor并返回false,然后你可以点击弹出窗口外面来关闭它。
popWindow.setTouchable(true);
popWindow.setTouchInterceptor(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
如果它不起作用,请告诉我,我会看到我想念的。
这个答案类似于Gabe Sechan的答案,我在发布这个答案之前就没有发现......
答案 5 :(得分:0)
确保popupWindow.showAsDropDown(popupView, 0, 0);
在这些之后
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));