http://blog.csdn.net/huangbiao86/article/details/6705180
系統框架將處理日常的焦點移動來響應用戶的輸入,它包刮改變焦點(當界面是被移除,隱藏,或者作爲一個新的View變爲可用狀態),通過isFocusable()這個方法我們可以知道view是否具有接受焦點的資格,也可以通過setFocusable().來設置view接受焦點的資格,對應在觸摸模式下,你可以調用isFocusableInTouchMode().來獲知是否有焦點來響應點觸,也可以通過setFocusableInTouchMode().來設置是否有焦點來響應點觸的資格.
系統框架控制焦點移動到另一個組件的算法是在某一方向上鄰近的組件,在極個別情況下,默認的算法可能不符合開發者的預想要求,在這種情況下,你可以覆寫下列XML屬性的佈局文件:nextFocusDown ,nextFocusLeft ,nextFocusRight ,和nextFocusUp 設置他們的值來明確
焦點從當前界面移動下個界面的Id。例如:
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
一般來說,在這個垂直佈局,瀏覽的焦點會從第一個按鈕開始,不會是從第二個或者其他的,現在topButtont已經通過nextFocusUp (反之亦然)確定了bottom.
通常如果你想宣佈用戶界面具有焦點的資格 (如果這個界面在傳統上是沒有的),可以在xml佈局裏去加上的android:focusable的屬性,並設置它的值,您也可以宣佈在觸摸模式下具有焦點的資格,同樣也只在xml裏添android:focusableInTouchMode.的屬性,並設置它的值. 當用戶請求在某個界面聚集焦點時,會調用requestFocus().這個方法。監聽到焦點活動(獲得焦點或失去焦點都會被通知),會調用onFocusChange(),這個方法。雖然帖子比較短,但是我感覺這個例子還是非常有用的,希望對開發者有一些幫助。想繼續交流的可以回帖。
- //監聽焦點事件
- et_search.setOnFocusChangeListener(new OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean isFocused) {
- // TODO Auto-generated method stub
- System.out.println(isFocused);
- if(!isFocused){
- et_search.setVisibility(View.GONE);
- }
- }
- });