80 votes

EditText avec pavé numérique par défaut, mais en permettant à des caractères alphabétiques

J'ai un EditText boîte et je veux le clavier par défaut qui vient quand il est sélectionné pour être le pavé numérique, puisque la plupart du temps , les utilisateurs en seront la saisie de numéros. Cependant, je ne veux autoriser les utilisateurs à entrer des caractères alphabétiques trop, si ils en ont besoin. À l'aide de android:inputType="number" limite d'entrée de caractères numériques uniquement. Quelles options dois-je avoir?

11voto

Sherif elKhatib Points 23987

Je propose une solution plus Robuste:

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

BESOIN DE CORRECTIFS

-meilleure gestion d'afficher/masquer les boutons de sélection d'entrée

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

enter image description here

Ici, l'activité est:

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);
    }

}

Ici est l'activité du xml : 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>

10voto

Terel Points 695

Voici ce que vous cherchez:

Définir 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 l'appel suivant dans votre onCreate():

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

Chaque fois que vous cliquez dans votre EditText maintenant, vous pouvez entrer des chiffres ET des lettres! (Chiffres du clavier est affiché en premier)

8voto

Alpay Points 665

Malheureusement, ce n'est pas possible, car un seul inputType peut être défini pour un EditText. Le suivant va juste montrer alphabatic caractères 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, définissez votre type d'entrée numérique, et il suffit d'ajouter une petite switchKeyboard bouton sur votre formulaire à proximité du pavé numérique. Et l'ensemble de ses onClick

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

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

6voto

Paresh Mayani Points 48123

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

Les valeurs possibles pour l' android:inputtype sont:

  • texte
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • nombre
  • numberSigned
  • numberDecimal
  • téléphone
  • datetime
  • date
  • le temps

ensuite, vous pouvez utiliser n'importe quelle valeur, montrant en exemple:

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

4voto

Shaista Naaz Points 1934

Asus tablette dispose de cette fonctionnalité, ils ont personnalisé le clavier par défaut. Et le clavier contient les chiffres et alphabets. Je pense que votre exigence est la solution de trop personnaliser le clavier par défaut

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X