Bonjour à toutes et à tous,
Dans une application qui pourrait ressembler à un ListeView, je crée par code, autant de RelativeLayout contenant des EditText qu'il m'en faut. Ce nombre correspond au nombre de textes différents que j'ai enregistrés et qui sont chargés dans chacun des EditText.
A la fin du chargement, le clavier s'affiche. J'aurais aimé qu'il ne s'affichât pas .
Je pense que l'affichage est lié à la création des EditText. Si à chaque fois qu'il s'en crée un, je mets sa propriété setFocusable à faux, le clavier ne vient pas s'afficher. Pour autant je ne peux plus entrer de texte dans mes EditText, c'est pas malin. Donc, à la fin du chargement de tous les EditText, je remets leur propriété setFocusable à vrai et ... ça ne réactive pas le clavier. Par contre, si j'utilise la propriété setFocusableInTouchMode, là, le clavier apparaît, mais il n'a jamais disparu !
Tout cela se passe bien évidemment au lancement dans : "protected void onCreate(Bundle savedInstanceState)"
On tourne en rond !
Je me suis amusé à remettre à vrai la propriété setFocusableInTouchMode non plus dans cette procédure de démarrage, mais dans une procédure que j'appelle en appuyant sur un bouton. Et bien là, ça marche ! Tant que je n'ai pas appuyé sur le bouton, le clavier n'apparaît pas et les EditText sont inactifs. A la suite de l'appui sur le bouton, tous mes editText redeviennent actifs, mais sans que le clavier ne s'affiche. Il s'affiche dès que j'appuie sur un des EditText pour y entrer du texte.
J'aurais aimé que cette suite d'évènement soit automatique.
Ci après le code (simplifié) de la classe MEMO où je crée mes EditText :
et le code au lancement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class MEMO { public RelativeLayout boiteEdit; private LayoutParams boitePrms; public EditText edit; private LayoutParams editPrms; public boolean editEnCours = false; static Random randomGenerator = new Random(); public MEMO() {}; public int init(Context context, final int ind, int hB, int couleur, int idPrec, RelativeLayout conteneur) { indX = ind; boiteEdit = new RelativeLayout(context); boiteEdit.setId(Math.abs(randomGenerator.nextInt())); boitePrms = new LayoutParams(LayoutParams.MATCH_PARENT, hB); ... boiteEdit.setLayoutParams(boitePrms); ... edit = new EditText(context); editPrms = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); edit.setLayoutParams(editPrms); edit.setGravity(Gravity.TOP); boiteEdit.addView(edit); conteneur.addView(boiteEdit); edit.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { editEnCours = true; } @Override public void afterTextChanged(Editable s) { } }); return boiteEdit.getId(); } }
Désolé pour la longueur de ce sujet, mais si vous aviez des idées pour que le clavier ne s'affiche que lorsque j'appuie sur un EditText ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; ... espaceTexte = (RelativeLayout)findViewById(R.id.EspaceTexte ); FCH.dirMemo = FCH.defRep("Memo"); // Le nom du répertoire de stockage est "memo" File[] fchMemo = FCH.listeFch(FCH.dirMemo, "Memo", ".txt"); nbMemo = fchMemo.length; // Nombre de MEMO à créer memo = new MEMO[nbMemo]; // Création du tableau de MEMO int idPrec = 0; for (int i = 0; i < nbMemo; i++) { memo[i] = new MEMO(); // Création d'un MEMO idPrec = memo[i].init(context, i, 200, clSable, idPrec, espaceTexte); // initialisation d'un MEMO memo[i].edit.setFocusable(false); // ça, ça bloque le clavier memo[i].edit.setText(FCH.litFichier(FCH.dirMemo, fchMemo[i].getName())); memo[i].edit.setFocusableInTouchMode(true); //ça, ici, le remet comme si je n'avais rien fait }
Cordialement.
Pierre
Partager