如何使用Togglebutton使区域可编辑/不可编辑?

时间:2019-02-19 00:53:02

标签: android android-layout android-togglebutton

我试图创建一个区域,所以当ToggleButton处于打开状态时,您可以在该区域中切换按钮,如果ToggleButon已关闭,则将无法在该区域中切换按钮。

对于这个特定区域,我使用了FrameLayout,因此我可以将两个LinearLayout彼此堆叠。因此,当我按下“编辑按钮”时,上面半透明的按钮将以setVisibility(View.GONE)消失,现在您可以单击按钮了。

问题:该区域中的按钮始终是可点击的

我可以用button.setClickable(true/false)分别切换它们,但是有解决方案,因此您无法单击顶部的LinearLayout(例如“不可点击”)?

链接到布局的图像:https://i.imgur.com/eTyhCDc.png

所需行为:

命中编辑->蓝色透明布局上的半透明布局消失->现在可以单击TESTOFF1和TESTOFF2。 ->点击完成->半透明的版式再次出现在顶部,并且其下方的按钮不再可单击(无需对每个按钮使用.setClickable)。

2 个答案:

答案 0 :(得分:0)

在任何触摸事件下,顶部视图都会首先破裂。如果顶视图无法处理触摸,则下面的视图可能会降到底视图。顶层是LinearLayout,因此,但默认情况下,它不处理触摸,因此它允许触摸事件渗透到乐于响应的按钮。

解决此问题的一种方法是将touch listener放置在仅返回true的半透明视图上。因此,LinearLayout将使用事件,而不会让按钮看到它们。

视图消失后,按钮变为顶视图,因此它们将看到点击。

如果您想了解有关如何处理触摸事件的更多信息,请阅读this Stack Overflow answer以获得出色的解释。

答案 1 :(得分:0)

editButton.setOnClickListener {
    button1.isEnabled = !button1.isEnabled
    button2.isEnabled = !button2.isEnabled
    editButton.setText(
        if (button1.isEnabled) {
            R.string.done
        } else {
            R.string.edit
        }
    )
    transparentView.isInvisible = button1.isEnabled
}

此示例使用的是kotlin和Android KTX库

Java版本

editButton.setOnClickListener(new OnClickListener {
    button1.setEnabled(!button1.isEnabled());
    button2.setEnabled(!button2.isEnabled());
    editButton.setText(button1.isEnabled() ? R.string.done : R.string.edit);
    transparentView.setVisibility(button1.isEnabled() ? View.INVISIBLE : View.VISIBLE);
});