2012-05-19 106 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);

相关问题