如何关闭Android中的弹出窗口?

san*_*eta 3 android view onclick back android-popupwindow

我有一个弹出窗口,当单击活动中的按钮时会弹出该窗口。该对话框覆盖整个屏幕,仅包含三个按钮。如果单击按钮,则它们会相应地起作用。但是,如果用户触摸按钮以外的弹出窗口中的任何位置,我希望弹出窗口关闭。我尝试了以下代码。

popupWindow.setOutsideTouchable(true);
popupWindow.showAtLocation(layout, Gravity.FILL, 0, 0);

popupWindow.setTouchInterceptor(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            popupWindow.dismiss();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

但它没有用。我还设置了这个:

popupWindow.setFocusable(true);

popupWindow.setTouchable(true);
Run Code Online (Sandbox Code Playgroud)

我的弹出式布局如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup_element"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="10px">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="10dp">

        <ImageButton
            android:id="@+id/voiceCall"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center|center_horizontal"
            android:background="@drawable/round_button"
            android:padding="15dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_call_black_24dp" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Voice Call"
            android:textColor="#ffffff"
            android:textSize="20dp" />
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果我单击此弹出窗口中除这两个按钮之外的任何位置,我希望它被关闭。没有什么对我有用。谁能建议我如何做到这一点?另外,如果单击设备后退按钮,我希望弹出窗口消失。

小智 5

您可以为两个按钮所在的线性布局编写一个 setOnClick 侦听器。像这样...

linearlayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });
Run Code Online (Sandbox Code Playgroud)