Android控制元件獲取焦點
阿新 • • 發佈:2018-12-31
問題來源:
使用android:ellipsize="marquee"
這個屬性時,發現textview並不能實現跑馬燈效果,百度之,說是要先獲取焦點,於是乎,textview.requestFocus();
然並卵。
然後就有了這篇文章,主角上場:requestFocus();setFocusable();setFocusableInTouchMode();
先看下原始碼解釋:
這兩個方法目的是一樣的,就是設定view是否可以獲得焦點,TouchMode顧名思義是觸屏模式下咯~
這裡注意一下,setFocusable設定為false會導致TouchMode下也為false,setFocusableInTouchMode設定為true會導致非TouchMode下也為true。所以為true只要設定setFocusableInTouchMode(true),為false只要設定setFocusable(false),當然兩個同時設定最保險啦~
再來看requestFocus()
這個方法是用來獲取焦點的,用EditText來做個測試,會發現:
EditText edit=(EditText)findViewById(R.id.edit);
edit.setFocusable(true);
edit.setFocusableInTouchMode(true);
edit.requestFocus();
這段是可以成功獲取焦點的。
EditText edit=(EditText)findViewById(R.id.edit);
edit.setFocusable(false );
edit.setFocusableInTouchMode(false);
edit.requestFocus();
而這段顯然是不能了。
綜上,setFocusable()和setFocusableInTouchMode()是requestFocus()的控制條件。
回到最初的問題,加上這兩個控制條件:
TextView textview=(TextView)findViewById(R.id.mt);
textview.setFocusable(true);
textview.setFocusableInTouchMode (true);
textview.requestFocus();
發現可以實現marquee的跑馬燈效果了~
不過樓主手賤,把textview.requestFocus()這段程式碼刪了發現還是可以實現…但是一旦別的控制元件獲取了焦點,跑馬燈效果就停止了,使用textview.requestFocus()獲取焦點後,效果又開始~