2013-04-25 39 views
6

我有2個片段上有幾個EditText框。他們都是相似的,但是很奇怪的是,1會在EditText字段之間選項卡,但另一個不會。Android XML - 在EditText字段之間移動

這是我遇到的問題之一:

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

當我從第一次的EditText框選項卡,焦點然後消失它焦點移動第二場第2個選項卡上。同樣,如果我選項卡的焦點去,然後再次選項卡,它出現在它下面的按鈕。

除了獲取指向EditText字段的指針外,Fragment的onCreateView中沒有什麼特別的。就像我說的,我有一個非常相似的第二視圖,工作正常。

當我選項卡,我發現我得到這些警告沒有顯示在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 } 

編輯-----------------

好,正如評論中所建議的那樣,我將onFocusChanged監聽器添加到所有視圖(通過它們全部循環並添加監聽器)並記錄視圖。每次我標籤,我得到的日誌,但奇怪的是,我標籤到第一個EditText框和日誌說editText框有焦點,我再次選項卡和焦點丟失,但日誌說相同的EditText框有焦點! 再次選中,第二個獲得焦點和日誌說正確的ID,選項卡再次集中丟失,但再次日誌說,第二個EditText框有焦點,即使它沒有!

非常奇怪的行爲。

+0

可以'android:focusableInTouchMode'成爲問題嗎? – 2013-04-28 00:54:53

+0

恐怕不是。無論如何,EditText都是可以聚焦的。 – Darren 2013-04-28 06:16:25

+0

它可能與添加片段的方式有關嗎?另外,有沒有辦法找到從ExitText框中消失的焦點? – Darren 2013-04-28 08:03:51

回答

4

正如@Delyan所建議的,您應該可以添加一個XML屬性來控制這種行爲。但是,您可能想嘗試使用其他android:nextFocus____屬性之一,例如android:nextFocusForward。這些屬性的完整列表在here及以下。

+0

'android:nextFocusForward'作品:-)非常感謝。我不知道那個,但似乎暗示了接下來要展示的觀點,而且它很有用。謝謝 – Darren 2013-05-02 19:25:35

+0

@Darren,非常歡迎你!很高興我能幫忙。 – Phil 2013-05-02 20:08:30

+0

另外,如果回答這個問題,請不要忘記接受:) – Phil 2013-05-02 20:09:21

1

您可以使用android:nextFocusDown來覆蓋標籤順序。通常,選項卡向下看,shift +選項卡擡起,方向鍵/跟蹤球觸發左/右焦點查找。

+0

謝謝。我曾嘗試添加'android:nextFocusDown =「@ + id/passwordLog」'但我得到了需要2個選項卡的相同行爲。 – Darren 2013-05-01 14:36:54

相關問題