Как сделать область редактируемой / не редактируемой, используя Togglebutton? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытался создать область, поэтому, когда ToggleButton включен, вы можете переключать кнопки в этой области, а если ToggleButon выключен, вы не сможете переключать кнопки в этой области.

Для этой конкретной области я использовал FrameLayout, поэтому я могу сложить два LinearLayout друг на друга.Поэтому, когда я нажимаю кнопку «Редактировать», верхняя часть, полупрозрачная сверху, исчезает с setVisibility(View.GONE), и теперь вы можете нажимать кнопки.

ПРОБЛЕМА: кнопки в этой области всегда доступны для нажатия

Мне удалось переключить их по отдельности с помощью button.setClickable(true/false), но есть ли решение, так что вы просто не можете щелкнуть через LinearLayout, который находится сверху (например, "not-through-clickable")?

Ссылка на изображение макета: https://i.imgur.com/eTyhCDc.png

Желаемое поведение:

Нажмите EDIT -> полупрозрачный макет поверх синего макета исчезает -> TESTOFF1 и TESTOFF2 теперь доступны для нажатия.-> Хит DONE -> полупрозрачный макет снова появляется сверху, а кнопки под ним больше не нажимаются (без использования .setClickable для каждой кнопки).

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
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);
});
0 голосов
/ 19 февраля 2019

Вид сверху становится первым треском при любых событиях касания.Если вид сверху не обрабатывает прикосновение, то вид внизу может снизиться до вида снизу.Верхний слой - LinearLayout, поэтому по умолчанию он не обрабатывает касания, поэтому он позволяет сенсорным событиям просачиваться вниз к кнопкам, которые с удовольствием отвечают.

Один из способов решения этой проблемы -поместить сенсорный слушатель в полупрозрачном виде, который просто возвращает true.Таким образом, LinearLayout будет использовать события и не позволит кнопкам их видеть.

Когда представление исчезнет, ​​кнопки станут видом сверху, поэтому они будут видеть щелчки.

ЕслиВы хотите узнать больше о том, как обрабатываются события касания, прочитайте этот ответ о переполнении стека , чтобы получить отличное объяснение.

...