0

「OK」ボタンのあるアクティビティがあります。そして、ダイアログを開く「編集」ボタンがあります(theme="@android:style/Theme.Holo.Light.Dialog")。EditDialogにいるとき、バックグラウンドのアクティビティに[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が開いているときに、バックグラウンドアクティビティのボタン押下が登録されました-OK Button Pressed!ログに記録されます。

4

3 に答える 3

3

まず、これはダイアログではありません。これはダイアログをテーマにしたアクティビティです。ダイアログはから継承しDialogます。

第二に、あなたの使用はWindowManager.LayoutParams.FLAG_NOT_TOUCH_MODALあなたが望まない行動を正確にあなたに与えることです。このコード行を削除すると、うまくいくはずです。

于 2012-05-20T12:48:58.733 に答える
0

aがフォアグラウンドにある場合、基になるActivityものはクリックできません(これがAndroidのsの動作方法です)。が開いているときに基になるものと対話できる場合は、実装に問題がある可能性があります。DialogDialogActivityDialog

編集:

この行を削除すると、すべてが機能するはずです。

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

アクティビティが設定されたダイアログテーマで開かれる場合は、以下のコードを使用してください

setFinishOnTouchOutside(false);

于 2014-07-08T11:26:15.827 に答える