如何使用 Togglebutton 使区域 editable/not 可编辑?
How to make area editable/not editable using Togglebutton?
我试图创建一个区域,这样当 ToggleButton 打开时,您可以在该区域内切换按钮,如果 ToggleButon 关闭,您将无法在该区域内切换按钮。
对于这个特定区域,我使用了 FrameLayout,因此我可以将两个 LinearLayout 堆叠在一起。因此,当我点击编辑按钮时,顶部的半透明按钮消失并显示 setVisibility(View.GONE)
,您现在可以点击按钮了。
问题:此区域中的按钮始终可点击
我可以使用 button.setClickable(true/false)
分别切换它们,但是有没有解决方案让您无法点击顶部的 LinearLayout(如 "not-through-clickable")?
Link 到布局的图像:https://i.imgur.com/eTyhCDc.png
期望的行为:
点击编辑 -> 蓝色布局顶部的半透明布局消失 -> TESTOFF1 和 TESTOFF2 现在可以点击。
-> 点击 DONE -> 半透明布局再次出现在顶部,它下面的按钮不再可点击(无需为每个按钮使用 .setClickable
)。
顶部的视图在任何触摸事件中都会首先出现。如果顶视图不处理触摸,那么下面的视图有机会向下查看底部视图。顶层是 LinearLayout
,但默认情况下,它不处理触摸,因此它允许触摸事件向下渗透到乐于响应的按钮。
解决此问题的一种方法是在 returns 为真的半透明视图上放置一个 touch listener。因此,LinearLayout
将使用事件而不让按钮看到它们。
视图消失后,按钮会变成顶部视图,因此它们会看到点击。
如果您想了解有关如何处理触摸事件的更多信息,请阅读 this Stack Overflow answer 以获得精彩的解释。
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);
});
我试图创建一个区域,这样当 ToggleButton 打开时,您可以在该区域内切换按钮,如果 ToggleButon 关闭,您将无法在该区域内切换按钮。
对于这个特定区域,我使用了 FrameLayout,因此我可以将两个 LinearLayout 堆叠在一起。因此,当我点击编辑按钮时,顶部的半透明按钮消失并显示 setVisibility(View.GONE)
,您现在可以点击按钮了。
问题:此区域中的按钮始终可点击
我可以使用 button.setClickable(true/false)
分别切换它们,但是有没有解决方案让您无法点击顶部的 LinearLayout(如 "not-through-clickable")?
Link 到布局的图像:https://i.imgur.com/eTyhCDc.png
期望的行为:
点击编辑 -> 蓝色布局顶部的半透明布局消失 -> TESTOFF1 和 TESTOFF2 现在可以点击。
-> 点击 DONE -> 半透明布局再次出现在顶部,它下面的按钮不再可点击(无需为每个按钮使用 .setClickable
)。
顶部的视图在任何触摸事件中都会首先出现。如果顶视图不处理触摸,那么下面的视图有机会向下查看底部视图。顶层是 LinearLayout
,但默认情况下,它不处理触摸,因此它允许触摸事件向下渗透到乐于响应的按钮。
解决此问题的一种方法是在 returns 为真的半透明视图上放置一个 touch listener。因此,LinearLayout
将使用事件而不让按钮看到它们。
视图消失后,按钮会变成顶部视图,因此它们会看到点击。
如果您想了解有关如何处理触摸事件的更多信息,请阅读 this Stack Overflow answer 以获得精彩的解释。
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);
});