2016-05-05 141 views
0

我遇到了幾個並排居住的EditText組件的問題(它們是RelativeLayout的子項)。EditText焦點問題

   <EditText 
       android:id="@+id/num1" 
       android:layout_width="40dp" 
       android:layout_height="40dp" 
       android:maxLength="1"      
       android:inputType="number" 
       android:textColor="@color/textColor" 
       android:gravity="center" 
       android:focusableInTouchMode="true" 
       android:focusable="true" 
       /> 
      <EditText 
       android:id="@+id/num2" 
       android:layout_width="40dp" 
       android:layout_height="40dp" 
       android:maxLength="1" 
       android:layout_toEndOf="@id/num1" 
       android:layout_marginStart="10dp"      
       android:inputType="number" 
       android:textColor="@color/textColor" 
       android:gravity="center" 
       android:focusableInTouchMode="true" 
       android:focusable="true" 
       /> 
      <EditText 
       android:id="@+id/num3" 
       android:layout_width="40dp" 
       android:layout_height="40dp" 
       android:maxLength="1" 
       android:layout_toEndOf="@id/num2" 
       android:layout_marginStart="10dp"      
       android:inputType="number" 
       android:textColor="@color/textColor" 
       android:gravity="center" 
       android:focusableInTouchMode="true" 
       android:focusable="true" 
       /> 

此外,以下是嘗試從NUM1組件焦點更改NUM2組件相關的代碼,但實際上發生的事情是重點轉到從NUM1到NUM3:

 final EditText etLastNumber1 = (EditText) findViewById(R.id.num1); 
    final EditText etLastNumber2 = (EditText) findViewById(R.id.num2); 
     etLastNumber1.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (Misc.IsKeyCodeNumber(keyCode)) { 
       etLastNumber1.clearFocus(); 
       etLastNumber2.requestFocus(); 
       return false; 
      } 
      return true; 
     } 
    }); 

我已經嘗試了相同代碼的不同變體,包括不使用clearFocus和/或始終返回true。另外,父佈局使用descendantFocusability = beforeDescendants和focusableInTouchMode = true。

如何解決這個問題?

+0

嘗試安卓@SathishKumarJ我想你的建議descendantFocusability =「blocksDescendants」你的相對佈局 –

+0

什麼...發生的是,沒有組件獲取焦點 – lionheart

回答

0

OK,在Android應用開發等方面的幾個星期後,我又回到這個問題,我已經找到了解決這個問題的方法。

該問題主要是與在輸入和關注的組件期間可能發生的關鍵事件的上下文有關。

這麼說,我已經添加到OnKeyListener方法高亮條件:

   if (event.getAction() != KeyEvent.KEYCODE_SOFT_LEFT && event.getAction() != KeyEvent.KEYCODE_SOFT_RIGHT && Misc.IsKeyCodeNumber(keyCode)) { 

      } 
2

嘗試其中之一:

android:nextFocusDown="@+id/.." 
android:nextFocusLeft="@+id/.."  
android:nextFocusRight="@+id/.."  
android:nextFocusUp="@+id/.." 

例子:

<EditText 
       android:id="@+id/num1" 
       android:layout_width="40dp" 
       android:layout_height="40dp" 
       android:maxLength="1"      
       android:inputType="number" 
       android:textColor="@color/textColor" 
       android:gravity="center" 
       android:focusableInTouchMode="true" 
       android:focusable="true" 
       android:nextFocusDown="@+id/num2" 
       /> 
+0

setOnKeyListener的實現狀態,我想設置焦點到另一個組件當用戶輸入一個數字字符 – lionheart