7
votes

Android Onfocuschange en XML

J'ai une application Android et dans le fichier de mise en page XML, j'ai quelque chose comme ceci: xxx

puis dans le code Java, j'ai implémenté xxx

Puis-je utiliser une approche similaire pour la mise au point d'actions changeantes. Avoir dans le XML quelque chose comme xxx

et ensuite dans le code Java: xxx

ou il n'y a aucun moyen de faire un moyen de faire oncocuschange dans le XML?


0 commentaires

5 Réponses :


0
votes

Il n'y a pas de propriété dans XML comme Onfocuschanged.Vous devez gérer le changement de mise au point dans le code Java lui-même.


0 commentaires

0
votes

Traditionnellement, il n'est pas utilisé dans la déclaration XML, vous pouvez ajouter le Android: Capable Attribut XML à la vue, dans votre déclaration de présentation terminée, définissez-la true. Ensuite, vous devez gérer le changement de mise au point de votre code Java.


0 commentaires

0
votes

Il n'y a pas de Android Equivalent d'espace de noms XML pour un Onfocuschangelistener Comme vous le décrivez, mais théoriquement, vous pouvez implémenter quelque chose de similaire à l'aide de la réflexion et de la bibliothèque de liaison de données Android, bien que je voudrais Évitez probablement cela - il est beaucoup plus propre de gérer simplement le changement de mise au point de Java.


0 commentaires

4
votes

Nous ne pouvons pas définir la mise à l'écoute de Changement de mise au point sur editext dans XML Fichier comme OnClick Stratégreer. Nous devons le faire dans le fichier Java uniquement.

edit_Text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
    if(hasFocus){
        Toast.makeText(getApplicationContext(), "got the focus", Toast.LENGTH_LONG).show();
    }else {
        Toast.makeText(getApplicationContext(), "lost the focus", Toast.LENGTH_LONG).show();
    }
   }
});


0 commentaires

16
votes

Si vous utilisez la liaison des données Android pour lier vos gestionnaires, vous pouvez écrire une liaison personnalisée n'importe où dans votre code pour réussir votre gestionnaire de XML à Java:

<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable name="handler" type="Handler" />
    </data>
    <EditText app:onFocusChange="@{handler.OnFocusChangeListener}"/>
</layout>


2 commentaires

Cela fonctionne sûrement! Chaque fois que la mise au point est modifiée system.out.print ("s"); est excusé depuis que nous avons joint la mise au point de la mise au point auditeur


Y compris l'application : préfixe dans la déclaration @BindingAdapter générera un avertissement de compilateur. Les adaptateurs de liaison s'attendent à ce que leurs attributs liés soient dans le http://schemas.android.com/apk/res-auto Espace de noms, alors même si app: est le préfixe habituellement Lié à cet espace de noms, il est trompeur de l'inclure car cela implique que vous ayez le choix d'utiliser un espace de noms différent. Annotation de la méthode avec @BindingAdapter ("Onfocuschange") . Dans le XML, bien sûr, vous avez toujours besoin du préfixe sur le nom de l'attribut comme d'habitude.