11
votes

EditText: Comment activer / désactiver l'entrée?

J'ai une grille de 7x6 de editext vues. Je souhaite toutes les personnes handicapées lorsque l'application commence, c'est-à-dire qu'ils devraient se comporter comme la normale textviews et ne pas être modifiables. Ensuite, l'utilisateur tapote une cellule dans la grille, elle change de fond et effectue quelque chose de visuel. Si l'utilisateur clique sur la cellule une fois de plus, il devrait permettre l'édition. Je me débats avec onclick () et oncocuschange () auditeurs, mais je ne peux pas accomplir une interaction aussi basique.

Jouer avec SetEnabled () et SETFOCUSABLE () NE Aide pas. Je me demande pourquoi même une tâche simple comme celle-ci a été rendue si difficile sur Android


0 commentaires

7 Réponses :


4
votes

Essayez d'utiliser ce SetFocusAnTouch () au lieu de SetFocusable () Méthode.


1 commentaires

J'ai un problème à l'aide de cela. Je sais que cela semble une tâche simple, mais il est très difficile de faire le travail. Je ne peux pas vous expliquer le nombre de problèmes lors de l'utilisation de cela, mais l'interaction est loin de mon objectif. Si vous avez le temps, essayez ceci sur le code et voyez ce qui se passe



-1
votes

Vous pouvez faire le follwoing:
Si vous souhaitez rendre EditText non modifitable, utilisez la méthode suivante

edittext.setInputtype(Null);


1 commentaires

Ne fonctionne pas. L'EditText peut toujours avoir l'accent, afin qu'il puisse être édité par un mot clé dur. C'est un bug connu



-1
votes

Selon la ligne de guidage Android, veuillez utiliser LongkeyPress pour la question que vous avez "si l'utilisateur clique sur la cellule une fois de plus, il devrait permettre l'édition"


1 commentaires

Où avez-vous lu ceci? Je ne suis pas au courant de ces directives. Quoi qu'il en soit, le problème n'est pas avec Double Tap Tap vs Long Tap. Il s'agit d'une commutation entre un TextView et un EditText lorsque l'utilisation effectue une action



0
votes

Puisque vous utilisez GridView pour vous préoccuper, vous pouvez effectuer ce qui suit.

  1. SetonitemClickListener sur GridView
  2. étend EditText pour faire votre propre vue EditText

    La classe extensible contiendra une propriété booléenne nommée modifiable à l'aide de cette propriété à OnitemClickListerner de GridViewYou peut appeler ensemble ou setFocusabel ou à la fois pour un EditText.

    Si vous partagez votre code, je peux élaborer davantage sur ce numéro.


1 commentaires

En fait, je ne peux pas utiliser de gridlayout. J'ai nié deux dispositions linéaires pour faire ma table. Aussi, malheureusement, je ne vois pas de crédibilité () int L'API publique



2
votes

Réglage du type d'entrée à NULL n'est pas suffisant, car il ne supprime que le clavier logiciel et si le périphérique dispose d'un clavier matériel, il y aura une entrée. Donc, afin de supprimer toute modification que vous devriez suivre:

editText.setInputType(InputType.TYPE_NULL);
editText.setFilters(new InputFilter[]
    {
        new InputFilter()
        {
            public CharSequence filter(CharSequence src, int start,
            int end, Spanned dst, int dstart, int dend)
            {
                return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
            }
        }
    });


3 commentaires

Merci pour cette suggestion. Malheureusement, cela ne suffit pas pour résoudre le problème. C'est incroyable


Qu'est-ce que tu veux dire incroyable ?! Ce n'est pas une question de croire ou non - c'est juste une question de vérification. J'utilise ce morceau de code dans l'application et ça marche


Désolé Barmaley: L'incroyable fait référence à la documentation pauvre Android, pas votre suggestion :)



25
votes

J'ai enfin trouvé une solution. C'est une question d'appeler

  • setFocusableItouchmode (booléen)
  • setFocusable (booléen)

    Lorsque le eittext est créé pour la première fois, il peut donc intercepter les clics. Ensuite, on peut régler ces drapeaux à nouveau pour rendre le editext modifiable, demander la mise au point et afficher / masquer manuellement le clavier programmable avec INPUTMETHODMANAGER MÉTHODES


1 commentaires

MERCI! J'ai eu exactement le même problème, et ce correctif fonctionne. Qui aurait pensé que nous devions passer à travers cela beaucoup de travail (et si peu de bonne documentation) pour vous rendre à une solution aussi simple? Bon travail!



4
votes

Tout d'abord, écrivez cette ligne dans votre XML dans editext: xxx pré>

et d'utiliser le code dans Java comme indiqué ci-dessous: p>

Boolean check = true;
yourEditText.setEnabled(check);
check=!check;


0 commentaires