簡體   English   中英

Android:后台的按鈕“對話框”的活動處於活動狀態?

[英]Android : Buttons in the background Activity of a 'Dialog' is active?

我有一個帶有“確定”按鈕的活動。 我有一個“編輯”按鈕,它將打開一個對話框( theme="@android:style/Theme.Holo.Light.Dialog" )。 當我進入EditDialog時,我可以在后台活動中看到“確定”按鈕,並且可以按該按鈕,並且該按鈕正在注冊。

打開對話框時,是否可以禁用后台活動動作? 即我只想修改對話框中的內容。

編輯:添加示例代碼,以顯示此行為。 主要活動:

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時,將注冊后台活動上的Button Press- OK Button Pressed! 將被記錄。

首先,這不是對話框。 這是一個以對話為主題的活動。 對話框繼承自Dialog

其次,對WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL的使用恰恰為您提供了您不想要的行為。 刪除此行代碼,事情應該會更好。

Dialog位於前台時,基礎Activity中的任何內容均不可單擊(這是Android中Dialog的工作方式)。 如果您可以在打開Dialog時與基礎Activity交互,那么您的實現可能存在問題。

編輯:

刪除此行,一切都應該工作:

this.setCanceledOnTouchOutside(false); 

如果您的活動是通過設置對話框主題打開的,請使用以下代碼

setFinishOnTouchOutside(false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM