我正在尝试在活动上创建自定义对话框,并且能够成功进行对话。
现在,我希望在点击活动按钮时隐藏对话框,而不是使用设备后退按钮或外部点击。问题是 - 当对话框打开时,活动失去焦点,因此不会点击按钮(我认为)
这是对话框类的构造函数 -
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上运行
答案 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