单击活动时关闭自定义对话框

时间:2013-11-08 06:57:50

标签: android dialog

我正在尝试在活动上创建自定义对话框,并且能够成功进行对话。

现在,我希望在点击活动按钮时隐藏对话框,而不是使用设备后退按钮或外部点击。问题是 - 当对话框打开时,活动失去焦点,因此不会点击按钮(我认为)

这是对话框类的构造函数 -

public CustomDialog(Context context) {

        super(context);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.cus_dialog);
    }

和xml -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
     android:background="@drawable/normal_border"
    android:orientation="vertical"
    android:padding="20dp" >

    <TextView
        android:id="@+id/delete_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:text="@string/delete_msg"
         />

    <LinearLayout
        android:id="@+id/work_phone_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/delete_msg"
        android:layout_margin="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/delete_yes_label"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:background="@drawable/normal_border"
            android:text="@string/yes"
            android:textAppearance="@style/labels" />

         <View
            android:id="@+id/gap"
            android:layout_width="0dp"
            android:layout_height="3dp"
            android:layout_weight="2"
           />

       <Button
            android:id="@+id/delete_no_label"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:background="@drawable/normal_border"
            android:text="@string/no"
            android:textAppearance="@style/labels" />
    </LinearLayout>

</RelativeLayout>

我试过了 -

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

但没有效果。我不知道这里发生了什么。请帮忙

更新 - 我在HTC(Android 4.0)上测试过它在这台设备上工作正常,但不能在android 2.3上运行

3 个答案:

答案 0 :(得分:2)

当您的对话框出现在屏幕上时,您的活动将处于已暂停状态,因此无法对“活动”执行操作。当对话框出现在屏幕上时,将调用方法onPause(),从而在对话框解除您的活动方法onResume()被调用并允许活动执行操作后立即停止进一步操作的活动。

您可以通过以活动形式创建自定义对话框来完成此操作,然后在清单文件中将该活动的主题设置为对话框。

像这样

<activity android:theme="@android:style/Theme.Dialog" />

现在,您需要通过传递意图来打开此活动,而不是显示对话框,您的活动将以对话形式显示在之前的活动中。

现在,当您运行此对话框时,您将观察对话框何时出现,当对话框关闭时,您的活动的onPasue()方法被调用onResume()将被调用。

答案 1 :(得分:1)

它只有一行代码试试这个..

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout.xml);

    this.setFinishOnTouchOutside(false);

答案 2 :(得分:0)

android 4.0 Dialog gets canceled when touched outside of dialog window

尝试使用setCanceledOnTouchOutside(布尔取消)方法,并在对话窗口外触摸时将布尔值传递给enable/disable对话框行为。

进一步检查This