Entrée de KeyCode dans le prochain texte d'édition
dans edittext, après avoir tapé la touche 'Enter', le système crée une nouvelle ligne à l'intérieur de celle-ci. J'aimerais me concentrer sur le prochain texte, pas de nouvelle ligne. comment le code? mon code en xml est en dessous de
<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"/>
j'ai aussi caputer code de la clé dans 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;
}
});
5 réponses
vous devez utiliser la méthode requestFocus
. Dans votre cas, ce sera quelque chose comme:
tCNPCode.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == 66) {
txtCNPCode.requestFocus();
}
return false;
}
});
Vous n'avez même pas à utiliser OnKeyListener
. Il suffit d'ajouter la ligne android:singleLine="true"
à votre EditText
. Après cette opération EditText
se comporte exactement comme vous voulez. Donc, dans votre cas particulier:
<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"
/>
résout le problème.
La meilleure façon est d'utiliser l'une des options pour inputType, par exemple: android:inputType="textPersonName"
Cela permettra d'atteindre l'effet recherché. Vérifiez les autres options aussi, cela vous fera gagner du temps à l'avenir :)
vous ne devriez pas utiliser android:singleLine=" true", car il est déprécié. Voici ce que les documentations en disent:
cet attribut est déprécié et est remplacé par le textMultiLine drapeau dans l'attribut inputType. Utiliser attention lors de la modification existant layouts, comme la valeur par défaut de singeLine est false (multi-line mode), mais si vous spécifiez une valeur pour inputType, la valeur par défaut est seul le mode en ligne. (Si les attributs singleLine et inputType sont found, les options inputType annuleront la valeur de singleLine.).
envisager IME options, bonne description ici http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId = 422 et documentation ici http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions .
la seule chose dont vous avez besoin est d'ajouter l'attribut android:imeOptions=" actionNext " sur chaque texte édité. Le clavier apparaît avec une touche suivante où Enter était et permet de naviguer vers le texte D'édition suivant.
mais l'ordre de "actionNext" est de haut en bas. Par exemple, si vous avez la disposition horizontale:
<LinearLayout android:orientation="horizontal" >
<EditText android:id="@+id/et1" android:imeOptions="actionNext" />
<EditText android:id="@+id/et2" android:imeOptions="actionNext" />
</LinearLayout>
et2 ne se concentre jamais. Vous devez le corriger dans le code:
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;
}
});
lien Original: https://groups.google.com/forum/?fromgroups=#!topic / android-developers/OykOG6XtE8w
vient de définir le nombre maximum de lignes à la case EditText
dans le fichier de mise en page xml:
android:maxLength="1"