button-xml 中android:clickable=false 属性
今天在做項目的時候,遇到了一個問題,就是需要把一個常按監聽事件,加到一個linearlayout中,但是,這個linearlayout中有其他的button、textview等控件,這樣就導致當我們常按textview的時候,觸發的是textview等子控件的常按事件。今天我們討論的并不是如何解決這個問題,而是在解決這個問題的過程中,我遇到的android:clickable 跟 android:longClickable 這兩個xml屬性。
先看這兩個屬性在xml中的用法
<Buttonandroid:id="@+id/bt0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="#ff0000"android:clickable="false"android:longClickable="false"android:text="long fasle" />這兩個屬性有什么意義呢,我們看Button 中對這兩個屬性的處理
case com.android.internal.R.styleable.View_clickable:clickable = a.getBoolean(attr, clickable);break;case com.android.internal.R.styleable.View_longClickable:longClickable = a.getBoolean(attr, longClickable);break;} } a.recycle();setFocusable(focusable);setClickable(clickable);setLongClickable(longClickable);我們很明白,它其實就是setClick 跟 setLongClick方法xml中的使用。
那么問題就來了。在代碼里設置了上面兩個屬性為false,但當我在代碼中給這這個按鈕設置點擊事件的時候,這兩個點擊事件仍然可以觸發,而且似乎沒有影響。后來我發現了問題所在。我們看一下
setOnClickListener 方法中到底做了什么事情
public void setOnClickListener(OnClickListener l) {if (!isClickable()) {setClickable(true);} getListenerInfo().mOnClickListener = l;}public void setOnLongClickListener(OnLongClickListener l) {if (!isLongClickable()) {setLongClickable(true);}getListenerInfo().mOnLongClickListener = l;}我們很清除就知道了,之所以這兩個屬性設置沒有效果,是因為,當我們給一個控件添加點擊事件的時候,它們會重新把這個控件的clickable 屬性進行設置。所以,如果我們想要禁掉一個控件的點擊事件,我們必須是在點擊事件以后使用
setLongClickable(false); setClickable(false)方法
轉載于:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_clickable_1583213.html
總結
以上是生活随笔為你收集整理的button-xml 中android:clickable=false 属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIT 牛刀小试 (第一发)
- 下一篇: Java 字符串操作的总结1(转载)