2014-05-20 2 views
0

Voici ma première question ici. Je crée une boîte de dialogue pour entrer un nom de joueur dans un menu de jeu, mais je veux restreindre les caractères possibles (seulement des lettres et des chiffres, et sinon exclure au moins le retour) et éviter d'appuyer sur le bouton ok si le champ est vide, mais je ne peux pas comprendre comment faire cela. Y a-t-il aussi un moyen de définir l'action par défaut sur retour à ok? Je sais que beaucoup d'applications utilisent ceci pour faire des entrées plus rapidement. Voici ce que j'ai:Besoin de restriction d'entrée dans AlertDialog

public String tmPlayerName; 

...

public void playerDialog() { 
    dialogOpen = true; 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    alert.setTitle("Change player"); 
    alert.setMessage("Enter player name (cannot be empty)"); 
    final EditText input = new EditText(this); 
    input.setText(tmPlayerName); 
    input. 
    alert.setView(input); 
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      tmPlayerName = input.getText().toString(); 
      } 
     } 
    }); 
    alert.setNegativeButton("Cancel", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
       } 
      }); 

    alert.show(); 
} 

EDIT: L'application est construite en utilisant Android 4.0 et utilise des services Google Play si c'est-à toute aide.

+0

Voir cette réponse: http://stackoverflow.com/a/14192231/2649012 –

+0

La solution donnée dans le lien me limite pour entrer quoi que ce soit. Des idées sur la façon de restreindre une soumission vide? –

+0

La réponse montrée donne une solution pour 'vouloir restreindre les caractères possibles (seulement des lettres et des nombres' alors il est très facile de rejeter un texte vide' if (myEdt.getText(). ToString.equals ("")) {} ' –

Répondre

0

Vous pouvez utiliser Regex pour faire comparer avec l'entrée de texte:

String reg = "^[a-zA-Z0-9]*$"; 

final AlertDialog.Builder alert = new AlertDialog.Builder(this); 


      alert.setTitle("Change player"); 
      alert.setMessage("Enter player name (cannot be empty)"); 
      final EditText input = new EditText(this); 

      input.setText("test"); 

      alert.setView(input); 
      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String tmPlayerName = input.getText().toString(); 
        if(tmPlayerName.matches(reg)&&!tmPlayerName.isEmpty()){ 
         Log.i("ALERT","Store username -"+tmPlayerName); 
        }else{ 
         Toast.makeText(MainActivity.this, "Please put valid username", Toast.LENGTH_LONG).show(); 
        } 

       } 

      }); 
      alert.setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
         } 
       }); 

      alert.create().show(); 

Si vous voulez faire le bouton OK est désactivé alors qu'il est vide ... ma suggestion est d'utiliser boîte de dialogue personnalisée Essayez cet exemple - http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application

+0

Fonctionne comme une très bonne solution de contournement, mais souhaiterait qu'elle soit encore plus restrictive, par exemple, elle ne peut pas appuyer sur OK si le texte est invalide et uniquement pour entrer les caractères valides.Pour une raison quelconque, InputFilter ne fonctionne pas correctement –

+0

S'il vous plaît vérifier ma dernière note .. Si vous voulez faire le bouton OK est désactiver alors qu'il est vide ... ma suggestion est d'utiliser la boîte de dialogue personnalisée. Essayez cet exemple - http://www.helloandroid.com/tutorials/ how-display-custom-dialogue-votre-android-application –