web-dev-qa-db-fra.com

Afficher uniquement les boutons numériques sur le clavier virtuel sous Android?

Sur le clavier virtuel sous Android, vous pouvez configurer le clavier pour afficher les chiffres au lieu du clavier a-z à l'aide de Android:inputType="numberDecimal". Cependant, que dois-je faire si je veux uniquement afficher la ligne du numéro supérieur 1 2 3 4 5 6 7 8 9 0 et non les lignes suivantes commençant par @ # $ % ...?

Merci d'avoir écouté!

35
Benny Skogberg

Vous devez seulement ajouter cette ligne sur votre code:

input.setRawInputType(Configuration.KEYBOARD_12KEY);

cela affichera seulement le clavier numérique.

40
sergidk
Android:inputType="phone"
Android:digits="1234567890"

est une option

63
softarn

Le pavé numérique est la chose la plus proche que j'ai trouvée (définissez inputType="phone" sur votre EditText).

10
Justin

La réponse acceptée ne fonctionnait pas pour moi (testé sur les téléphones OnePlus 3t et Samsung Galaxy S6/S7). 

Cette solution utilise numberPassword mais substitue la méthode de transformation par défaut pour que EditText affiche les caractères au lieu d'afficher des points.

<EditText
    Android:id="@+id/userid"
    Android:inputType="numberPassword"
    Android:maxLength="6"
/>

// Numeric 6 character user id
EditText input = findViewById(R.id.userid);

// Process input and show characters instead of dots
input.setTransformationMethod(SingleLineTransformationMethod.getInstance());
2
PDP

La dernière fois que j'ai étudié, Android n'avait pas de bonnes options pour cela. J'ai fini par écrire ma propre version d'une interface utilisateur semblable à un clavier logiciel.

1
Spike Williams

Je viens de poster une réponse ici mais en postant pour simplifier

Semble Android a ajouté la fonctionnalité que nous recherchions. Ceci est le code XML que j'utilise pour l'entrée numérique EditText simple:

    Android:inputType="numberPassword"
    Android:digits="0123456789"
    Android:singleLine="true"
    Android:ems="4"
    Android:textColor="@Android:color/black"
    Android:gravity="center"
1
TopherC

La réponse acceptée n'a pas fonctionné pour moi. Il a continué à montrer d'autres caractères indésirables

J'ai trouvé un moyen d'accomplir le comportement que je voulais en modifiant le type d'entrée en numberPassword puis en désactivant les points de mot de passe.

textInput.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
textInput.transformationMethod = SingleLineTransformationMethod()
0
sgc_code

J'avais implémenté cela pour Android dans Xamarin. Donc, mon code est en C #. Mais le principal reste le même. Vous pouvez définir l'attribut d'edittext sur Android:inputType="numberPassword".

Ensuite, dans votre code, vous attachez une méthode de transformation personnalisée à votre vue edittext.

holder.edtxtQty.TransformationMethod = new HiddenPasswordTransformationMethod();

private class HiddenPasswordTransformationMethod : global::Android.Text.Method.PasswordTransformationMethod
        {
            public override Java.Lang.ICharSequence GetTransformationFormatted(Java.Lang.ICharSequence source, View view)
            {
                return new PasswordCharSequence(source);
            }
        }

    private class PasswordCharSequence : Java.Lang.Object, Java.Lang.ICharSequence
    {
        private char DOT = '\u2022';

        private Java.Lang.ICharSequence _source;
        public PasswordCharSequence(Java.Lang.ICharSequence source)
        {
            _source = source;
        }

        public char CharAt(int index)
        {
            return _source.CharAt(index);
        }

        public int Length()
        {
            return _source.Length();
        }

        public Java.Lang.ICharSequence SubSequenceFormatted(int start, int end)
        {
            return _source.SubSequenceFormatted(start, end); // Return default
        }

        public IEnumerator<char> GetEnumerator()
        {
            return _source.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return _source.GetEnumerator();
        }
    }
0
Altaf Virani