【问题标题】:Android: Force dialog themed activity to be modalAndroid:强制对话框主题活动为模态
【发布时间】:2010-02-11 01:17:04
【问题描述】:

我们屏幕上的按钮会导致显示具有“对话框”主题的活动。我们遇到的问题是,如果您连续两次快速单击按钮,对话框活动将打开两次。

通常我希望当一个新活动开始时,底层活动会立即停止,因此不会接受进一步的输入。

但是,由于对话框主题活动不会占据整个屏幕,我认为底层活动只是暂停,而不是停止,因此按钮仍然可以访问。

这让我想到了我的问题...有没有办法强制以对话框为主题的活动进入模式状态,用户无法点击下面活动上的按钮?

我可能可以通过禁用 onPause 中的所有内容并在 onResume 中重新启用它来手动完成此操作,但这似乎需要大量工作!谁有更简单的解决方案?

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    沿着禁用事物的路线(这看起来很糟糕和错误),但如果没有真正的解决方案。可以通过按钮单击事件中的简单返回来完成禁用。只要你在对话框返回时或者在onResume中重置bool

    boolean 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
            }
        });
    }
    

    【讨论】:

    • 感谢您的建议。这确实可行,但我希望有一个不涉及每个可触摸项目上的自定义代码的解决方案..
    【解决方案2】:

    另一种解决方案是不使用对话框主题启动您的活动,而是使用标准主题。在活动的 XML 中,指定一个占据整个屏幕的文本视图。但是,使 textview 透明(或半透明或彩色或 ....)并且可点击。

    然后,在同一个 xml 文件中,制作您的“对话框”,使其显示在文本视图的顶部。现在它看起来像一个对话框,它后面的活动仍然可以看到,但是在对话框之外的点击被透明的文本视图消耗。例如:

    <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 -->
    

    【讨论】:

    • 当我这样做时,背景总是黑色的,我看不到下面的活动。有什么建议吗?
    • 你能发布一些代码/xml吗?背景颜色可能需要更高的透明度级别才能看到底层活动。 (在我的头顶)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多