屏幕上的按钮会显示一个具有“对话框”主题的活动。如果您连续两次快速单击按钮,我们遇到了一个问题,对话框活动会打开两次。
通常我会期望在启动新活动时,基础活动会立即停止,因此不再接受任何输入。
但是,由于对话框主题活动没有占据整个屏幕,我认为基础活动只是暂停,而不是停止,因此仍然可以访问按钮。
这让我想到了我的问题......有没有办法强制对话主题活动进入模态状态,用户无法点击下面活动上的按钮?
我可以通过禁用onPause中的所有内容并在onResume中重新启用它来手动完成此操作,但这似乎很多工作!任何人都有一个更容易的解决方案?
答案 0 :(得分:1)
沿着禁用事物的方式(看到hacky和错误),但如果没有真正的解决方案。可以通过按钮单击事件中的简单返回来完成禁用。只要在对话框返回时或在onResume
中重置boolboolean clicked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (clicked)
return;
clicked = true;
// show dialog
}
});
}
答案 1 :(得分:0)
另一个解决方案是不使用对话框主题启动您的活动,而是使用标准主题。在您的活动XML中指定占用整个屏幕的文本视图。但是,使textview透明(或半透明或彩色或....)并可单击。
然后,在同一个xml文件中,创建“对话框”,使其显示在textview的顶部。现在它看起来像一个对话框,它背后的活动仍然可以看到,但对话框外的点击被透明的textview消耗。例如:
<TextView android:id="@+id/ViewHider"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#aa000000"
android:enabled="true"
android:clickable="true"
></TextView>
<!-- Then put your "dialog" xmal here -->