Ответ 1
Вы должны установить атрибут LinearLayout
android:clickable="true"
в файле макета xml или setClickable(true)
в коде активности java.
Появилась небольшая проблема с функциональностью, которую я хотел бы реализовать.
У меня есть LinearLayout
, содержащий 2 TextViews
. Я хотел бы установить onClickListener
на нем, чтобы он вел себя как элемент в ListView
.
Я пробовал какую-то возможную реализацию этого и работал, используя атрибут xml android:onClick
LinearLayout
.
Как я хочу, чтобы приложение визуально реагировало на щелчок на LinearLayout
(как в ListView
), я поместил это в метод обратного вызова слушателя:
l.setBackgroundColor(android.R.drawable.list_selector_background);
l - объект LinearLayout
, инициализированный findViewById()
;
Я получаю приложение, не отвечающее, когда я пытаюсь щелкнуть по макету. Я попытался заменить код в методе обратного вызова сообщением Toast, и он работает, поэтому я думаю, проблема в setBackgroundColor
.
Кто-нибудь знаком с этим?
PS: извините, я не могу опубликовать больше кода прямо сейчас, я на работе.
Вы должны установить атрибут LinearLayout
android:clickable="true"
в файле макета xml или setClickable(true)
в коде активности java.
я заметил, что все приведенные выше советы не помогают, если любой из дочерних элементов внутри LinearLayout имеет атрибут android: textIsSelectable = "true".
Я обнаружил, что setClickable (true) по-прежнему будет приводить к тому, что клики будут переходить к дочерним элементам linearlayout. Я обнаружил, что для LinearLayout захватить прикосновение, а не его, мне пришлось переопределить метод dispatchTouchEvent, поэтому я создал подкласс LinearLayout для этой цели. Похоже на уродливое решение.
вы должны установить для LinearLayout focusable значение true и установить для всех дочерних объектов значение focusable равным false, не используйте андроид: clickable = "true", но вы не можете увидеть эффект щелчка linelayout. BTW, лучший способ - реализовать onTouchEvent api.
Имел ту же проблему, я пробовал в течение часа все ответы в SO, но никто не работал.
Затем я понял, что мне просто нужно продвинуть LinearLayout в нижней части макета, так как другие представления блокировали его, а затем он работал, без добавления каких-либо специальных атрибутов в макет.
Поместите это здесь, если это когда-нибудь поможет кому-нибудь.