Как отключить все события клика на макете? - PullRequest
19 голосов
/ 04 июня 2011

У меня есть макет, который содержит много просмотров.Есть ли простой способ отключить все его просмотры событий клика?

Ответы [ 7 ]

36 голосов
/ 19 октября 2013

Вы можете передать View для отключения всех дочерних событий щелчка.

public static void enableDisableView(View view, boolean enabled) {
        view.setEnabled(enabled);
        if ( view instanceof ViewGroup ) {
            ViewGroup group = (ViewGroup)view;

            for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
                enableDisableView(group.getChildAt(idx), enabled);
            }
        }
    }
24 голосов
/ 24 февраля 2014

Вместо того, чтобы перебирать все дочерние представления, вы можете добавить эту функцию в родительское представление Layout

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    return true;
}

Это будет вызвано перед onTouchEvent для любых дочерних представлений, и если он вернет true, onTouchEvent для дочерних представлений вообще не будет вызываться. Вы можете создать элемент логического поля для включения и выключения этого состояния, если хотите.

12 голосов
/ 04 июня 2011

Я бы создал ViewGroup со всеми видами, которые вы хотите включить / отключить одновременно, и позвонил бы setClickable(true/false), чтобы включить / отключить щелчок.

5 голосов
/ 31 августа 2015

Вам нужно вызвать setEnabled(boolean value) метод в представлении.

view.setClickable(false);
view.setEnabled(false);
1 голос
/ 04 июня 2011

Сделайте логическое значение clickEnabled в своей активности и проверьте его в прослушивателях кликов;если это ложь, ничего не делай.

0 голосов
/ 13 декабря 2018

Если вы не хотите устанавливать все дочерние представления для отключения состояния (поскольку они могут выглядеть по-разному для включения состояния), вы можете использовать этот подход:

private fun toogleTouchable(canTouch: Boolean) {
        container.descendantFocusability =
                if (value) {
                    container.requestFocus()
                    ViewGroup.FOCUS_BLOCK_DESCENDANTS
                } else {
                    ViewGroup.FOCUS_AFTER_DESCENDANTS
                }
    }
0 голосов
/ 04 июня 2011

Я бы реализовал onClickListener интерфейс в вашем классе активности и вернул бы false в onClick методе.Я чувствую, что это самый простой способ решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...