2013-04-25 10 views
6

Mam 2 fragmenty z kilkoma polami EditText. Oba są ułożone podobnie, jednak bardzo dziwne, że 1 będzie tabulatorem między polami EditText, ale drugi nie.Android XML - poruszanie się między polami EditText

Jest to jeden Mam problemy z:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/loginparent" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ff008DFF" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="20dip" 
     android:background="#ff008DFF" 
     android:orientation="vertical" > 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="40dip" 
      android:contentDescription="@string/logoDesc" 
      android:src="@drawable/logo1" /> 

     <EditText 
      android:id="@+id/usernameLog" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:hint="@string/username" 
      android:imeOptions="actionNext" 
      android:singleLine="true" 
      android:textSize="14sp" /> 

     <EditText 
      android:id="@+id/passwordLog" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/password" 
      android:imeOptions="actionDone" 
      android:inputType="textPassword" 
      android:singleLine="true" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/loginButton" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/login" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dip" > 

      <TextView 
       android:id="@+id/textView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:text="@string/newuser" 
       android:textColor="#ffffffff" 
       android:textSize="14sp" /> 

      <Button 
       android:id="@+id/viewSignupBtn" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/signup" /> 
     </LinearLayout> 
    </LinearLayout> 

    <ProgressBar 
     android:id="@+id/progressBarLog" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:padding="70dip" 
     android:visibility="gone" /> 

</RelativeLayout> 

Kiedy zakładkę z pierwszym polu EditText, nacisk znika wtedy na 2nd karcie porusza się skupić na 2 pola. To samo z powrotem, gdy ustawiam tabulację, a potem znowu kartę i pojawia się ona na przycisku pod nią.

Nie ma nic szczególnego, co dzieje się w onCreateView Fragmentu oprócz otrzymywania wskaźników do pól EditText. Jak mówię, mam drugi widok bardzo podobny, który działa dobrze.

Gdy zakładka ja zauważam uzyskać te ostrzeżenia wyświetlane w logcat:

04-24 19:31:29.695: D/InputEventConsistencyVerifier(2040): KeyEvent: ACTION_UP but key was not down. 
04-24 19:31:29.695: D/InputEventConsistencyVerifier(2040): in [email protected] 
04-24 19:31:29.695: D/InputEventConsistencyVerifier(2040): 0: sent at 4325570000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=4325570, downTime=4325514, deviceId=0, source=0x101 } 
04-24 19:31:31.076: D/InputEventConsistencyVerifier(2040): KeyEvent: ACTION_UP but key was not down. 
04-24 19:31:31.076: D/InputEventConsistencyVerifier(2040): in [email protected] 
04-24 19:31:31.076: D/InputEventConsistencyVerifier(2040): 0: sent at 4326945000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=4326945, downTime=4326889, deviceId=0, source=0x101 } 
04-24 19:31:32.255: D/InputEventConsistencyVerifier(2040): KeyEvent: ACTION_UP but key was not down. 
04-24 19:31:32.255: D/InputEventConsistencyVerifier(2040): in [email protected] 
04-24 19:31:32.255: D/InputEventConsistencyVerifier(2040): 0: sent at 4328123000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=4328123, downTime=4328053, deviceId=0, source=0x101 } 

EDIT -----------------

Ok, jak zasugerowano w komentarzach, dodałem na FocusChanged słuchaczy do wszystkich widoków (Looped przez nich wszystkich i dodany słuchacz) i Logged what the view is. Za każdym razem, gdy zakładam, otrzymuję dziennik, ale dziwne jest to, że przechodzę do pierwszego pola EditText, a dziennik mówi, że pole editText ma fokus, ponownie ja zakładam i fokus jest tracony, ale dziennik mówi, że to samo pole EditText ma fokus! Zakładka ponownie, a druga dostaje fokus, a log mówi poprawny id, zakładka ponownie skupia się na stracie, ale znowu log mówi, że drugie pole EditText ma ostrość, chociaż nie ma !!

Bardzo dziwne zachowanie.

+0

Czy "Android: focusableInTouchMode" może być problemem? –

+0

Obawiam się, że nie. EditText i tak można ustawić. – Darren

+0

Czy może to mieć coś wspólnego ze sposobem dodawania Fragmentu? Czy istnieje również sposób, aby dowiedzieć się, co się staje, gdy zniknie z pola ExitText? – Darren

Odpowiedz

4

Jak sugeruje @Delyan, powinieneś być w stanie dodać atrybut XML, aby kontrolować to zachowanie. Możesz jednak spróbować użyć jednego z pozostałych atrybutów, takich jak android:nextFocusForward. Pełna lista tych atrybutów jest dostępna pod numerem here i poniżej.

+0

'Android: nextFocusForward' działa :-) Dziękuję bardzo. Nie wiedziałem o tym, ale wydaje mi się, że sugeruję, aby pokazać go dalej i działa. Dziękuję – Darren

+0

@Darren, proszę bardzo! Cieszę się, że mogłem pomóc. – Phil

+0

Ponadto, jeśli to odpowiedź na pytanie, proszę nie zapomnij przyjąć :) – Phil

1

Możesz użyć android:nextFocusDown, aby zastąpić kolejność kart. Ogólnie rzecz biorąc, karta spogląda w dół, przesuwa się o klawisze shift +, a klawisze kierunkowe/trackball uruchamiają wyszukiwanie w lewo/w prawo.

+0

Dzięki. Próbowałem dodać 'android: nextFocusDown =" @ + id/passwordLog "', ale mam takie samo zachowanie wymagających 2 kart. – Darren