0

我有一个带有“确定”按钮的活动。我有一个“编辑”按钮,它将打开一个对话框 ( theme="@android:style/Theme.Holo.Light.Dialog")。当我在 EditDialog 中时,我可以在后台 Activity 中看到 OK 按钮,我可以按下它,并且按下它正在注册。

有没有办法在对话框打开时禁用后台活动操作?即我想单独修改对话框中的内容。

编辑:添加显示此行为的示例代码。主要活动:

public class DialogTestActivity extends Activity implements OnClickListener {
    private final String TAG = "DialogTest.main";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button) findViewById(R.id.button_open)).setOnClickListener(this);
        ((Button) findViewById(R.id.button_ok)).setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button_ok:
            Log.w(TAG, "OK Button Pressed!");
            break;
        case R.id.button_open:
            Log.d(TAG, "Opening new Window.");
            Intent intent = new Intent(this, TestDialog.class);
            startActivity(intent);
        default:
            break;
        }
    }
}

TestDialog'对话框':

public class TestDialog extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_dialog);

        LayoutParams params = getWindow().getAttributes();
        params.height = LayoutParams.WRAP_CONTENT;

        Window window = this.getWindow();
        window.setAttributes((android.view.WindowManager.LayoutParams) params);
        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    }
}

显现:

<activity
    android:name=".DialogTestActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".TestDialog"
    android:label="@string/dialog_label"
    android:theme="@android:style/Theme.Holo.Light.Dialog" >
</activity>

使用上面的代码,当 TestDialog 打开时,后台 Activity 上的 Button Press 被注册 -OK Button Pressed!将被记录。

4

3 回答 3

3

首先,这不是对话。这是一个以对话为主题的活动。对话框继承自Dialog.

其次,你使用的WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL正是你不想要的行为。删除这行代码,事情应该会更好。

于 2012-05-20T12:48:58.733 回答
0

当 a 位于前台时,底层中的任何内容都不Activity应是可点击Dialog的(这就是Dialogs 在 Android 中的工作方式)。如果您能够在打开Activity时与底层交互Dialog,那么您的实现可能有问题。

编辑:

删除这一行,一切都应该工作:

this.setCanceledOnTouchOutside(false); 
于 2012-05-19T23:58:00.777 回答
0

如果您的活动是使用下面的设置对话框主题使用代码打开的

setFinishOnTouchOutside(false);

于 2014-07-08T11:26:15.827 回答