EditText avec le clavier numérique par défaut, mais permettant des caractères alphabétiques

j'ai une boîte EditText et je veux le clavier par défaut qui apparaît quand il est sélectionné pour être le clavier numérique, depuis la plupart du temps les utilisateurs vont entrer des nombres. Cependant, je veux permettre aux utilisateurs d'entrer des caractères alphabétiques aussi, s'ils le doivent. L'utilisation de android:inputType="number" restreint l'entrée aux chiffres seulement. Quelles options dois-je avoir?

75
demandé sur Rahul Tiwari 2010-08-23 05:33:27

19 réponses

je suggérerais une solution plus robuste:

Présenter à l'utilisateur la possibilité de choisir le type d'entrée:

NEEDED FIXATIONS

- meilleure manipulation de l'affichage / masquage des boutons de sélection d'entrée

- probablement supprimer les suggestions lorsque le type d'entrée est la lettre

enter image description here

Voici l'activité:

package mobi.sherif.numberstexttextview;

import android.os.Bundle;
import android.app.Activity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;

public class MainActivity extends Activity {

    EditText mEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEdit = (EditText) findViewById(R.id.input);
        mEdit.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View view, boolean focused) {
                findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE);
            }
        });
    }

    public void onNumbers(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
    }

    public void onLetters(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_TEXT);
    }

}

voici le xml de l'activité: activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_above="@+id/llmenu" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:id="@+id/input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number" >

                <requestFocus />
            </EditText>
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/llmenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#000000"
        android:padding="0dp" >

        <Button
            android:id="@+id/buttonnumbers"
            android:layout_width="0dp"
            android:onClick="onNumbers"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="Numbers" />

        <Button
            android:id="@+id/buttonletters"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="onLetters"
            android:text="Letters" />
    </LinearLayout>

</RelativeLayout>
12
répondu Sherif elKhatib 2013-01-29 15:26:09

voici ce que vous recherchez:

Définissez votre EditText dans votre xml de cette façon:

<EditText
    android:id="@+id/etTest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/hint">

</EditText>

et appelez suivant dans votre onCreate() :

etTest = (EditText) findViewById(R.id.etTest);
etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER);
// Note the "Raw"

chaque fois que vous cliquez sur votre EditText maintenant, vous pouvez entrer chiffres et lettres ! (Le clavier numérique est montré en premier)

11
répondu Terel 2013-01-29 11:41:07

malheureusement ce n'est pas possible, car un seul type d'entrée peut être défini pour un texte D'édition. Ce qui suit va juste montrer les caractères alphabétiques sur les boutons.

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text|number" />

cependant, ce que je peux vous suggérer est, mettez votre type d'entrée à numérique, et juste ajouter un petit bouton de tableau de distribution sur votre formulaire près de la pépite. Et régler son onClick

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

, de sorte que les utilisateurs peuvent passer à des caractères alphabétiques, trop.

7
répondu Alpay 2013-01-23 09:37:07

Définissez votre texte D'édition dans votre xml de cette façon:

<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>

sortie: android:inputType= "textVisiblePassword"

d'Une rangée de chiffres et le reste des lettres.

7
répondu Diego Santamaria 2016-09-02 15:56:28

fondamentalement, EditText inputtype est utilisé pour définir le type d'entrée dans votre EditText.

les valeurs possibles pour android:inputtype sont:

  • texte
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textphonétique
  • numéro
  • numberSigned
  • numberdécimal
  • téléphone
  • datetime
  • date
  • temps

alors vous pouvez utiliser n'importe quelle valeur comme montrant dans l'exemple:

<EditText android:id="@+id/EditText01"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 android:inputType="number"
 android:text="1212223"/>
5
répondu Paresh Mayani 2010-08-23 05:16:49

Asus tablette a cette caractéristique, ils ont personnalisé le clavier par défaut. Et le clavier contient les chiffres et alphabets. Je pense que votre solution de besoin est trop de personnaliser le clavier par défaut

4
répondu Shaista Naaz 2013-01-29 07:26:15

vous pouvez suivre la réponse de Paresh Mayani.

et dans les conseils vous pouvez utiliser android:inputType="textPhonetic" pour le texte d'entrée et le nombre basé sur la sélection d'utilisateur.

J'espère que vous avez compris.

2
répondu iDroid Explorer 2013-01-24 04:38:59

Dans OnCreate en Activité à le faire:

    t = (EditText) findViewById(R.id.test);
    t.setKeyListener(new KeyListener() {

        @Override
        public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyOther(View view, Editable text, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
            if (keyCode == 67) { // Handle backspace button =)
                if (text.length() > 0) {
                    t.setText(text.subSequence(0, text.length() - 1));
                    t.setSelection(text.length()-1);
                }
            }
            return false;
        }

        @Override
        public int getInputType() {
            return InputType.TYPE_CLASS_NUMBER;
        }

        @Override
        public void clearMetaKeyState(View view, Editable content, int states) {

        }
    });

dans ce cas, vous tapez est number et android affichera le clavier numérique, mais vous pouvez entrer tout ce que vous voulez. Vous pouvez également outrepasser d'autres méthodes comme vous le souhaitez.

2
répondu dilix 2013-01-29 07:18:30

, Voici comment je l'ai réalisé...

android:inputType= " textPhonetic|numberDecimal" android:chiffres="/0123456789.abcdefghijklmnopqrstuvwxyz "

seuls les caractères spécifiés par des chiffres seront autorisés.

veuillez noter que le clavier affiché est celui du composeur et non le clavier typique. Pour moi, il a réalisé ce dont j'avais besoin pour entièrement dans le XML.

2
répondu slaman 2013-10-27 03:06:29

vous ne devez pas utiliser de filtre inputType dans ce cas, il suffit d'ajouter la ligne ci-dessous dans votre propriété EditText

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

maintenant, seuls ces caractères seront autorisés à entrer dans le texte D'édition. Le code complet de votre texte sera comme ceci:

<EditText
 android:id="@+id/etTest"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
 android:hint="@string/hint">

2
répondu Naveed Ahmad 2015-05-25 13:05:08

pourquoi ne pas simplement avoir un bouton à bascule qui soit:

  • définit le type d'entrée pour ne permettre que les valeurs numériques
  • définit le type d'entrée pour permettre L'utilisation du clavier QWERTY
  • ou Définir d'autres types d'entrée (si nécessaire)

de cette façon, vous pouvez définir le pavé numérique par défaut, puis l'utilisateur peut le changer en appuyant sur un bouton.

1
répondu dabaerju 2013-01-27 09:36:30

ce n'est pas possible étant donné les types D'entrées Android par défaut sur différents téléphones.

il y a beaucoup de hacks possibles que fonctionne sur certains claviers mais pas sur d'autres , comme la méthode commune de définir le type d'entrée brut qui est généralement inclus dans les réponses:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

le meilleur conseil que j'ai pu trouver est d'utiliser le type d'entrée textPostalAddress dans votre XML:

  • android:inputType="textPostalAddress"

malheureusement , cela ne fait pas ce que nous voulons qu'il fasse encore , mais peut-être qu'il le fera à l'avenir . Le seul avantage de ceci est que les méta-informations sur votre boîte d'édition refléteront ce que vous avez l'intention de faire.

1
répondu Richard Le Mesurier 2015-11-25 05:47:33

par programmation, il est possible avec peu de réglage du flux habituel. Tout d'abord, vous devez définir editText comme:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

alors vous devez écouter pour keyevent. Sur la pression de La Livre fixe le InputType à nouveau à InputType.TYPE_CLASS_TEXT. Ça devrait marcher comme ça marche pour moi.

editText.setOnKeyListener(new View.OnKeyListener() 
{
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
     // TODO Auto-generated method stub
     Log.d("KeyBoard", "Keyboard Test Key Hit");

        switch (keyCode) 
        {
              KeyEvent.KEYCODE_POUND:

              if(editText.setInputType(InputType.TYPE_CLASS_TEXT);
              {                             
                   editText.setInputType(InputType.TYPE_CLASS_TEXT);
                   return true;
              }
         }
     }
}  
1
répondu Saurav 2016-05-10 08:56:56

Vous pouvez essayer de régler---

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

pour plus de description

0
répondu Swati 2017-05-23 11:54:24

dans votre code pour textView, supprimez le" texte " dans android:inputType.

il devrait être,

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />
0
répondu Ms. B 2013-01-29 05:43:12

Vous pouvez le faire par programmation:

// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);

setInputType(type int) définit le type du contenu avec une constante comme défini pour inputType.

0
répondu jmcdonnell40 2015-02-04 15:16:00

comme le dit Saurav, la meilleure façon est de passer du clavier QWERTY au clavier numérique avec un simple auditeur:

input.setInputType(InputType.TYPE_CLASS_TEXT);

input.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        switch (keyCode) {
        case 24: // Volumen UP

             input.setInputType(InputType.TYPE_CLASS_NUMBER);
             break;
         case 25: // Volumen DOWN

             input.setInputType(InputType.TYPE_CLASS_TEXT);
             break;
        }
        return true;
    }
});
0
répondu oskarko 2016-05-10 09:35:50

j'ai essayé toute la méthode mais pas parfaite. Donc, j'ai une autre idée. Travail parfait pour tous les clavier.

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reset_password);
    editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);


    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        if (editText.isFocused()) {
            editText.setInputType(InputType.TYPE_CLASS_TEXT);
        }

    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) {
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        }
    }
}
0
répondu Rico Teng 2016-07-23 13:15:07

dans votre mise en page xml pour EditText ajouter ce paramètre:

android:inputType="number|text"

cela permettra à l'utilisateur d'entrer le texte et le numéro et contient la logique dans le xml plutôt que d'avoir du code dans votre activité ou fragment.

-2
répondu Sam Bains 2015-02-04 15:15:24