Android clickable默认设置false失效?

187 阅读1分钟

场景

一个textview,xml中设置了clickable="false",然后在activity中设置监听事件; 默认希望他不能点击,等时机成熟在把他设置成可点击

<TextView
    android:id="@+id/tv_submit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:text="确定上传"/>
mSubmitBtn.setOnClickListener(v -> {
   // todo: 点击后的操作
});

问题

上面这段代码运行后,textview默认还是可以点击的

原因

设置setOnClickListener后,在它的源码中,将其默认改为可点击

/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */
public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

解决

在点击方法中加是否相应的判断

mSubmitBtn.setOnClickListener(v -> {
    if (enableNextBtn()) {
        // todo: 点击后的操作
    }
});