1. 程式人生 > >關於Android開發中實現錨點技術,也是焦點的改變

關於Android開發中實現錨點技術,也是焦點的改變

        今天朋友問了我一個問題,他的需求是點選listview的item跳轉到另一個listview中,由於需要跳轉的操作比較多,他想在一個佈局中實現,我給他一個建議就是做控制元件焦點的切換,根據他的要求,我做了簡單的dome。

       其實我自己也不知道這個方法行不行的通,我首先百度了一下關於Android中動態設定焦點的問題,可以說感謝我的朋友,又可以學習到新的東西了。

      我們先來看看關於焦點的知識,在Android佈局中,焦點是一個很重要的。因為如果一個控制元件沒有獲得焦點,那麼它對應的事件響應也就不會被觸發。

首先,是父控制元件和子控制元件之間焦點的控制,我們知道當一個點選事件發生的時候,父控制元件和子控制元件同樣都可能會接收到這個事件。想要按照我們的要求來指定他們的獲取順序和許可權,就要在父控制元件中設定 android:descendantFocusability 。

這個屬性值是對於父控制元件(ViewGroup)而言的,所以幾個選項的描述也是針對父控制元件,分別是先於子控制元件獲得焦點、後於子控制元件獲得焦點、獲得焦點後攔截。 
 android:descendantFocusability = 
 beforeDescendants 先於子控制元件獲得焦點 
 afterDescendants 後於子控制元件獲得焦點 
 blocksDescendants 獲得焦點後攔截

   而在子控制元件之間,我們先了解下動態設定焦點的方法。

setFocusable()   設定view接受焦點的資格    

isFocusable()    view是否具有接受焦點的資格   

setFocusInTouchMode()      對應在觸控模式下,設定是否有焦點來響應點觸的資格          

isFocusableInTouchMode()  對應在觸控模式下,view是否具有焦點的資格 

強制view焦點獲取,注意:這些方法都不會觸發事件(onTouch,onClick等),想要觸發onClick事件請呼叫view.performClick() 

requestFocus()                                 ------ view 

requestFocus(int direction)當用戶在某個介面聚集焦點,引數為下面的4個 

requestFocusFromTouch()    觸控模式下 

  ...... 

        我在這次的程式碼中就是強制焦點獲取。

 private void setListener(){
        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                listView2.requestFocus();
            }
        });
    }
詳細程式碼