[英]Android Dialog dialog (activity context) not dismissed when activity is killed in background
[英]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.