2014-10-18 22 views
5

我正在開發一個android項目,我正在使用android:nextFocusButton,因此用戶可以按下軟鍵盤上的下一個按鈕來移動EditText,而無需點擊每個編輯文本以進行更改焦點。android:nextFocusForward會出錯EditText

線性佈局,在水平

然後在下一行,在另一個線性佈局中我要求的用戶名和姓的佈局,在不同的EditText,然後我問了公司名。以下是顯示我的意思的截圖。

Basic Screen Layout

我所要做的,就是在頭名編輯文本,用戶可以在下壓,則應該將焦點切換到姓編輯文本,然後他們再按下一併將其移動到公司編輯文本。

取而代之的是,第一個名字有焦點,用戶按下下一個按鈕,並且它轉到公司編輯文本而不是姓氏。

下面是我的XML佈局的片段

<LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 
       <EditText android:id="@+id/createAccount_txtFirstName" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:hint="@string/first_name" 
        android:singleLine="true" 
        android:inputType="textCapSentences" 
        android:nextFocusForward="@+id/createAccount_txtLastName"/> 
       <EditText android:id="@+id/createAccount_txtLastName" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:hint="@string/last_name" 
        android:singleLine="true" 
        android:inputType="textCapSentences" 
        android:nextFocusForward="@+id/createAccount_txtCompanyName"/> 
      </LinearLayout> 
      <EditText android:id="@+id/createAccount_txtCompanyName" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/company_name" 
       android:singleLine="true" 
       android:inputType="textCapSentences" 
       android:nextFocusForward="@+id/createAccount_txtEmail"/> 

感謝您的幫助,您可以提供。

+1

嘗試添加android:imeOptions =「actionNext」 – 2016-09-28 14:14:31

回答

7

只需將其放置在您的第一個編輯文本中即可。另外隨着nextFocusDown

<EditText android:id="@+id/createAccount_txtFirstName" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:hint="@string/first_name" 
       android:singleLine="true" 
       android:inputType="textCapSentences" 
       android:nextFocusDown="@+id/createAccount_txtLastName"> 
<requestFocus /> 
</EditText> 

似乎運行在模擬器上的代碼時,被竊聽更換nextFocusForward。但是,它適用於手機

+0

更改爲nextFocusDown似乎工作。我不在模擬器上測試,使用2012 Nexus 7. – Boardy 2014-10-18 21:01:26

+0

也適用於我! – 2016-02-05 08:54:32

3

這可能是因爲Android焦點算法忽略了您的XML。文檔說明如下:

在極少數情況下,默認算法可能與開發人員的預期 行爲不匹配。在這些情況下,可以使用 文件中的以下XML屬性提供 明確覆蓋:nextFocusDown,nextFocusLeft,nextFocusRight和nextFocusUp。

我有類似的問題,我解決了它通過使用nextFocusDown

更多關於official documentation

1

無解的工作對我來說,除了監聽編輯動作偵聽器和編程設置焦點到下一個的EditText。

mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      mLastName.requestFocus(); 
      return true; 
     } 
    });