控件的clickable和focus

需求:希望點擊linearlayout之後能夠獲取焦點,並響應點擊事件。

一開始只對linearlayout設置了onclicklistenner,這樣發現雖然能夠響應點擊事件,但是不能獲取焦點。

 

修改:對linearlayout的佈局文件中增加了

android:focusableInTouchMode="true"

結果:可以獲取焦點,但是需要第二次點擊才能響應點擊事件。因爲第一次點擊先獲取焦點,獲取焦點後的點擊動作才能響應點擊事件。

 

修改:將處理事件從onClickListener修改到onFocusChange中,刪除setOnclickListener方法。

mLinearLayout.setOnFocusChangeListener(new View.OnFocusChangeListener() {
      @Override public void onFocusChange (View v, boolean hasFocus) {
        if (hasFocus) {
          //do something
          }
        }
      }
    });

結果:不能獲取焦點,不能響應事件

 

修改:增加setOnclickListener方法,但不做任何處理。

結果:可以獲取焦點,可以響應事件。

原因:參見《setOnclickListener、setClickable》中內容

因爲setOnclickListener會重繪View把setClickable設爲true。

默認clickable爲false,此時不能獲取focus。

 

正確方法:在xml中設置clickable

android:clickable="true"

 

之前在某文章中看到說focusable會導致控件的邏輯與之前的有不同,不建議使用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章