2016-05-05 14 views
0

Ich habe ein Problem mit mehreren EditText-Komponenten, die Seite an Seite (Sie sind Kinder von RelativeLayout).EditText Fokus Problem

   <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" 
       /> 

Auch nach der relevante Code, der Fokus von num1 Komponente num2 Komponente zu ändern versucht, aber eigentlich das, was passiert ist, dass sich der Fokus von num1 zu num3 geht:

 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; 
     } 
    }); 

Ich habe versuchte verschiedene Varianten des gleichen Codes, einschließlich der Verwendung von clearFocus und/oder immer True. Außerdem verwendet das übergeordnete Layout die Eigenschaften descendantFocusability = beforeDescendants und focusableInTouchMode = true.

Wie behebt man dieses Problem?

+0

try android: descendantFocusability = "blocksDescendants" auf Ihrem relativen Layout –

+0

@SathishKumarJ ich Ihren Vorschlag versucht haben ... was passiert ist, dass keine der Komponenten Fokus – lionheart

Antwort

0

OK, nach wenigen Wochen von anderen Aspekten in der Android-App zu entwickeln, habe ich zu diesem Thema zurück und ich habe habe den Weg gefunden, dieses Problem zu beheben.

Das Problem besteht hauptsächlich im Zusammenhang mit den Schlüsselereignissen, die während der Eingabe und den fokussierten Komponenten auftreten können.

Das heißt, ich habe die markierten Bedingungen der OnKeyListener Methode hinzugefügt:

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

      } 
2

einer von ihnen versuchen:

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

Beispiel:

<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

die Implementierung von SetOnKeyListener Staaten, die ich den Fokus auf eine andere Komponente setzen möchte, wenn der Benutzer ein Zahlenzeichen eingibt – lionheart