如何解雇Android中的弹出窗口?

时间:2017-03-06 07:00:39

标签: 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;
    }
});

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

popupWindow.setFocusable(true);

popupWindow.setTouchable(true);

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

<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>

enter image description here

如果我点击这个弹出窗口的任何地方,除了这两个按钮,我希望它被解雇。 什么都不适合我。谁能建议我怎么做?此外,如果单击设备后退按钮,我希望弹出窗口消失。

7 个答案:

答案 0 :(得分:3)

您可以为存在两个按钮的linearlayout编写setOnClick侦听器。像这样......

linearlayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });

答案 1 :(得分:2)

以下是答案 -

就像下面这样写:

<body>
  <h1>
      <a href="/On" id="On" class="on_class">ON</a>
  </h1>
  <h1>
      <a href="/Off" id="Off" class="off_class">OFF</a>
  </h1>
</body> 

$(document).ready(function () 
{
            $('#On').hide();

            $('#Off').click(function () {
                if ($('#Off').hasClass('off_class'))
                    $('#off').removeClass("off_class").addClass("large_button");              

            });

        });

它会正常工作! 如果答案有帮助,请投票。

答案 2 :(得分:1)

你的意思是:

tf.contrib.legacy_seq2seq.rnn_decoder

popupWindow.setCancelable(true);

取决于构建器级别或对话级别

@ update2:

popupWindow.setCanceledOnTouchOutside(true);

如果单击后退btn,请检查它是否显示:

// set a listener to listen your popup window click event
popupWindow.getContentView().setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        popupWindow.dismiss();
    }
});

答案 3 :(得分:0)

只需使用popupWindow.dismiss();为什么使用setTouchInterceptor以及所有......

答案 4 :(得分:0)

如果popupWindow是AlertDialog的对象,则可以使用

dialog.setCanceledOnTouchOutside(true);

答案 5 :(得分:0)

在弹出窗口显示的活动中尝试此代码段:

@Override
    public void onBackPressed() {
        super.onBackPressed();
        popupWindow.setOutsideTouchable(true); 
        popupWindow.dismiss();

}

答案 6 :(得分:0)

首先将Layout的宽度和高度设置为wrap_content,以便查看剩余的屏幕。 然后你可以启用setCancelable()属性为true popupWindow.setCancelable(真);

或者你可以使用 popupWindow.dismiss();

在你的onBackPress()方法中,它将被覆盖 例如: -

@Override
public void onBackPressed() {
    super.onBackPressed();
    popupWindow.dismiss();
}