2012-05-19 141 views
0

我有一個有「確定」按鈕的活動。我有一個'編輯'按鈕,它將打開一個對話框(theme="@android:style/Theme.Holo.Light.Dialog")。當我在EditDialog中時,我可以在後臺Activity中看到OK按鈕,然後我可以按下它,並且它正在註冊。Android:後臺按鈕「對話框」的活動是否處於活動狀態?

有沒有一種方法來禁用背景的活動動作時的對話是開放的?即我想單獨修改對話框中的內容。

編輯:添加顯示此行爲的示例代碼。 主要活動:

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!將被記錄。

+0

當'Dialog'是在前臺,沒有在底層活動應該點擊。如果你可以創建一個示範項目來展示你的問題,我會很樂意看到它。 – CommonsWare

+0

上面給出的示例代碼。 – Koottan

回答

3

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

其次,你的WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL使用是給你正是你不想要的行爲。刪除這行代碼,事情應該更好。

+0

用'this.setCanceledOnTouchOutside(false)創建一個對話框;'解決了這個問題。謝謝。 – Koottan

+1

只是從API 11的信息更改爲setFinishOnTouchOutside(),所以this.setFinishOnTouchOutside(false);將會被使用。 – iabhi

0

Dialog位於前臺(這是Android中的Dialog工作方式)時,底層Activity中的任何內容都不應該可點擊。如果您可以在Dialog打開時與潛在的Activity進行交互,那麼您的實施可能有問題。

編輯:

刪除此行,所有應該工作:

this.setCanceledOnTouchOutside(false); 
+0

我附上上面的代碼。我的要求是,如果我在對話框中,當我觸摸Dialog之外的某個位置(這是默認行爲)時,它不應該退出,並且後臺活動不應該註冊任何呼叫。我明白我設定的旗幟有問題。感謝你的幫助,如果你能建議正確的做法。 – Koottan

0

如果你的活動打開設置對話框主題使用下面的代碼

setFinishOnTouchOutside(false);

相關問題