2010-06-11 54 views
24

在edittext中,輸入'Enter'鍵後,系統在其中創建一個新行。我想專注於下一個edittext,沒有新行。如何編碼?我的XML代碼如下KeyCode_輸入到下一個編輯文本

<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true"/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true"/> 

我也setOnKeyListener

tCNPCode.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      if(keyCode == 66) { 
       Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show(); 
       //tNPCode.setFocusable(true); 
      } 
      return false; 
     } 
    }); 

回答

12

caputer關鍵代碼,您必須使用requestFocus方法。在你的情況下,它會是這樣的:

tCNPCode.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(keyCode == 66) { 
      txtCNPCode.requestFocus(); 
     } 
     return false; 
    } 
}); 
+1

謝謝。我使用requestFocus。有效。需要添加返回true;? – soclose 2010-06-11 03:32:50

+3

我建議用ACTION_UP過濾它,因爲你會兩次敲擊onKey方法,並且如果你正在實現setOnKeyListener到ArrayList 內的EditText列表,你將冒險前進兩步。 if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()== KeyEvent.ACTION_UP) – jkanini 2013-02-06 10:53:57

+0

我不會使用實際的int文字,因爲它根本不可讀。 – styler1972 2017-10-23 01:09:29

34

你甚至不必使用OnKeyListener。只需將android:singleLine="true"行添加到您的EditText即可。在此操作後EditText的行爲完全如你所願。所以,在你的具體情況下:

<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true" 
    android:singleLine="true" 
/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true" 
/> 

解決了這個問題。

+0

這與IME行動結合是最好的選擇,謝謝 – 2011-11-01 08:18:11

+0

感謝這個真棒和簡單的解釋 – anetha 2014-08-13 08:40:00

+1

這個ID很好,但android:singleLine =「true」已被棄用。 – 2016-11-08 07:06:18

9

最好的方法是使用inputType的其中一個選項,例如:android:inputType="textPersonName" 這將實現想要的效果。查看其他選項,它將爲您節省一些時間:)將來會爲您節省一些時間:)

您不應該使用android:singleLine =「true」,因爲它已被棄用。以下是文檔中提到的內容:

此屬性已棄用,由inputType屬性中的textMultiLine 標誌替換。因爲singeLine的默認值爲false(多行 模式),所以在修改現有的 佈局時要小心,但是如果爲inputType指定了任何值,則默認爲 單行模式。 (如果找到singleLine和inputType屬性均爲 ,則inputType標誌將覆蓋singleLine的值。)。

6

考慮IME選項,這裏有很好的描述http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422和這裏的文檔http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

唯一需要的是在每個EditText上添加屬性android:imeOptions =「actionNext」。鍵盤出現在Enter鍵所在的位置,並允許導航到下一個EditText。

但是「actionNext」的順序是從上到下。例如,如果您有水平佈局:

<LinearLayout android:orientation="horizontal" > 
     <EditText android:id="@+id/et1" android:imeOptions="actionNext" /> 
     <EditText android:id="@+id/et2" android:imeOptions="actionNext" /> 
</LinearLayout> 

et2從來沒有得到重點。你應該修復它的代碼:

et1.setOnEditorActionListener(new OnEditorActionListener() 
{ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, 
      KeyEvent event) 
    { 
     switch (actionId) 
     { 
     case EditorInfo.IME_ACTION_NEXT: 
      boolean result = false; 
      TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT); 
      if (v1 != null) 
       result = v1.requestFocus(View.FOCUS_RIGHT); 
      else if (!result) 
      { 
       v1 = (TextView) v.focusSearch(View.FOCUS_DOWN); 
       if (v1 != null) 
        result = v1.requestFocus(View.FOCUS_DOWN); 
      } 
      if (!result) 
       v.onEditorAction(actionId); 
      break; 

     default: 
      v.onEditorAction(actionId); 
      break; 
     } 
     return true; 
    } 
}); 

原文鏈接:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

1

線的最大數目正好被設置爲在XML佈局文件中EditText框: android:maxLength="1"