Android:强制对话主题活动为模态

时间:2010-02-11 01:17:04

标签: android dialog

屏幕上的按钮会显示一个具有“对话框”主题的活动。如果您连续两次快速单击按钮,我们遇到了一个问题,对话框活动会打开两次。

通常我会期望在启动新活动时,基础活动会立即停止,因此不再接受任何输入。

但是,由于对话框主题活动没有占据整个屏幕,我认为基础活动只是暂停,而不是停止,因此仍然可以访问按钮。

这让我想到了我的问题......有没有办法强制对话主题活动进入模态状态,用户无法点击下面活动上的按钮?

我可以通过禁用onPause中的所有内容并在onResume中重新启用它来手动完成此操作,但这似乎很多工作!任何人都有一个更容易的解决方案?

2 个答案:

答案 0 :(得分:1)

沿着禁用事物的方式(看到hacky和错误),但如果没有真正的解决方案。可以通过按钮单击事件中的简单返回来完成禁用。只要在对话框返回时或在onResume

中重置bool
boolean clicked;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button b = (Button)findViewById(R.id.Button01);
    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (clicked)
                return;
            clicked = true;
            // show dialog
        }
    });
}

答案 1 :(得分:0)

另一个解决方案是不使用对话框主题启动您的活动,而是使用标准主题。在您的活动XML中指定占用整个屏幕的文本视图。但是,使textview透明(或半透明或彩色或....)并可单击。

然后,在同一个xml文件中,创建“对话框”,使其显示在textview的顶部。现在它看起来像一个对话框,它背后的活动仍然可以看到,但对话框外的点击被透明的textview消耗。例如:

<TextView android:id="@+id/ViewHider"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#aa000000"
    android:enabled="true"
    android:clickable="true"
    ></TextView>

<!-- Then put your "dialog" xmal here -->