2017-08-08 1 views
0
<LinearLayout 
      android:id="@+id/loginInputs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <EditText 
       android:id="@+id/txtUsername" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:ems="10" 
       android:hint="User Name" 
       android:imeOptions="actionNext" 
       android:text="" /> 

      <EditText 
       android:id="@+id/txtPassword" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:ems="10" 
       android:inputType="textPassword" 
       android:text="" /> 
     </LinearLayout> 

Je veux obtenir le focus suivant de txtUsername dans le code. Si je définis l'attribut android:nextFocusDown, je peux l'obtenir en utilisant txtUsername.getNextFocusDownId();. (When softkey enter pressed focus moved to nextFocusDown) Je veux savoir qu'il existe une méthode pour obtenir le focus par défaut suivant par code sans définir les attributs de focus.Comment obtenir le focus suivant d'un EditText lorsque je ne définis pas nextFocusDown dans Android

Je peux obtenir la même fonctionnalité en définissant des attributs de focus pour tous les EditTexts. Mais je pense qu'il devrait y avoir une meilleure façon de le faire.

P.W. Je veux faire une logique en fonction de l'objectif suivant. Je ne veux pas changer d'objectif.

+0

_ "Mais je pense qu'il devrait y avoir une meilleure façon de le faire" _ Suggérez-vous qu'il est préférable de régler et de régler manuellement le focus lors de l'exécution plutôt que de définir les attributs de focus en XML? – CzarMatt

+0

@CzarMatt Non. Pour un projet existant, la définition des attributs de focus pour tout EditText prend du temps. Ce n'est que lorsque les attributs de focus sont définis que je peux obtenir le focus suivant par code. Mais pas autrement. –

Répondre

0

Basé sur votre P.W. et votre commentaire question, je vous recommande d'utiliser View.OnFocusChangeListener

https://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

Attachez un écouteur à votre EditText (ou tout autre point de vue dans la hiérarchie qui pourrait recevoir le focus)

txtUsername.setOnFocusChangeListener(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) 
      // do some logic here, removing focus if necessary 
    } 
}); 

De cette façon, vous pouvez champ pour les événements de changement de focus et gérer toute logique supplémentaire que vous souhaitez effectuer. Vous pouvez également supprimer le focus de cet objet et le définir ailleurs si vous le souhaitez. Android fera de son mieux pour diriger la mise au point, mais ce n'est pas parfait lorsque les attributs de mise au point ne sont pas définis. C'est notre travail en tant que développeurs de combler les lacunes et de créer la meilleure expérience de navigation.

Voir Making Apps More Accessible pour plus d'informations.