Как работает настройка атрибута Clickable в XML? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть Button в Activity:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"      
    android:text="Test"      
    android:onClick="onClickEvent"
    android:clickable="false"
    android:focusable="false" />

и метод:

public void onClickEvent(View view) {

    Toast.makeText(this, "Hey!!", Toast.LENGTH_SHORT).show();
}

Несмотря на установку атрибута clickable в false в xml, почему событие click все еще должно работать? что-то отменяет это?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Согласно наиболее часто задаваемому здесь ответу , clickable возвращается к истине из-за глобального метода setOnClickListener.

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

Мне кажется, это немного излишне, и самый чистый метод - использовать setEnabled(false), на мой взгляд, но попробуйте поиграть со слушателями, если вы действительно не хотите использовать setEnabled.

0 голосов
/ 26 апреля 2018

Несмотря на то, что clickable имеет значение false, почему событие click должно работать?

setClickListener сбрасывает этот флаг.

public void More ...setOnClickListener(OnClickListener l) {
2318        if (!isClickable()) {
2319            setClickable(true);
2320        }
2321        mOnClickListener = l;
2322    }

и да android:onClick="onClickEvent" звонки внутри страны setOnClickListener

...