EditText standardmäßig mit Zifferntastatur, jedoch mit alphabetischen Zeichen

82

Ich habe ein EditText-Feld und möchte, dass die Standardtastatur, die angezeigt wird, wenn sie als Ziffernblock ausgewählt wird, da Benutzer meistens Zahlen eingeben . Ich möchte jedoch zulassen, dass Benutzer bei Bedarf auch alphabetische Zeichen eingeben können. Die Verwendung android:inputType="number"beschränkt die Eingabe nur auf numerische Ziffern. Welche Möglichkeiten habe ich?

Frank Bozzo
quelle
2
Hallo, hast du die Lösung? Wenn ja, dann teile sie bitte mit. Ich muss dieselbe implementieren
Bansal_Sneha
Möchten Sie, dass der Benutzer nur mit numerischen Zahlen beginnt und nach mehr als einer Ziffer die Eingabe von alphanumerischen Zeichen zulässt?
Dhuma1981
Dies hat eine Antwort hier
Rahul Tiwari
mögliches Duplikat. Frage in diesem ähnlichen Beitrag
hrk_er

Antworten:

16

Definieren Sie Ihren EditText in Ihrer XML folgendermaßen:

<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"/>

Ausgabe: android: inputType = "textVisiblePassword"

Eine Reihe von Zahlen und der Rest von Buchstaben.

Diego Santamaria
quelle
3
Dies sollte die gewählte Antwort sein!
Tash Pemhiwa
Das hängt von der Tastatur ab. In meinem Fall funktioniert nicht mit den letzten Versionen von Google Keyboard und Nougat.
fireb86
Haben Sie das Problem behoben
Ashwin S Ashok
this._editText.setInputType (InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); this._editText.setTypeface (Typeface.DEFAULT); funktioniert für mich
xevser
@ fireb86 funktioniert mit der neuesten Version von Gboard. Und es funktioniert perfekt auf Oreo.
Tim John
11

Ich würde eine robustere Lösung vorschlagen:

Präsentieren Sie dem Benutzer die Möglichkeit, den Eingabetyp auszuwählen:

BENÖTIGTE FIXES

- Bessere Handhabung beim Ein- / Ausblenden der Eingangsauswahltasten

- Entfernen Sie wahrscheinlich die Vorschläge, wenn der Eingabetyp Buchstabe ist

Geben Sie hier die Bildbeschreibung ein

Hier ist die Aktivität:

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

}

Hier ist die XML der Aktivität: 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>
Sherif elKhatib
quelle
Wenn die Zahl einer der Eingabetypen ist und sich die Tastatur im Vollbildmodus (Querformat) befindet, werden Buchstaben ausgeblendet. Wenn Sie zum TEXT-Eingabetyp zurückkehren, werden sie erneut angezeigt.
OneWorld
10

Folgendes suchen Sie:

Definieren Sie Ihre EditTextin Ihrer XML wie folgt:

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

</EditText>

Und rufen Sie folgendes an onCreate():

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

Wann immer Sie in Ihr EditTextJetzt klicken , können Sie Ziffern UND Buchstaben eingeben ! (Zifferntastatur wird zuerst angezeigt)

Terel
quelle
3
Auf einem Nexus 7 zeigte es den Ziffernblock, aber es gab keine Möglichkeit, die normale Tastatur anzuzeigen.
Rob
Sah vielversprechend aus, aber wenn die Zahl einer der Eingabetypen ist und sich die Tastatur im Vollbildmodus (Querformat) befindet, werden Buchstaben ausgeblendet.
OneWorld
8

Dies ist leider nicht möglich, da nur ein inputType für einen EditText festgelegt werden kann. Im Folgenden werden nur alphabetische Zeichen auf Schaltflächen angezeigt.

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

Ich kann Ihnen jedoch vorschlagen, dass Sie Ihren Eingabetyp auf numerisch setzen und einfach eine kleine switchKeyboard-Schaltfläche in Ihrem Formular in der Nähe des Nummernblocks hinzufügen. Und setzen Sie seinen onClick

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

Damit können Benutzer auch zu alphabetischen Zeichen wechseln.

Alpay
quelle
Grund dafür liegt in der Dokumentation. Schauen Sie sich die konstanten Namen genau an. Sie können nur eine Klasse mit einer Variation und einem Flag kombinieren. Wie TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNED. Aber Sie können nie Klassen wie numberundtext
OneWorld
Die Dokumentation besagt sicherlich nicht, dass Klassen nicht gemischt werden können. Es gibt keinen Flusencheck, der sich darüber beschwert. und es gibt sogar eine spezielle Tastatur beim Kombinieren, zB number|text(siehe oben), was bedeutet, dass Sie Buchstaben durch langes Drücken eingeben können, was eigentlich nicht funktioniert. sieht für mich eher fehlerhaft oder zumindest unvollständig aus.
masc3d
@ masc3d - vereinbartes Dokument sagt nicht, wo es sollte. Wird unter InputType in der Beschreibung von TYPE_MASK_CLASS: Maske von Bits erwähnt, die die gesamte angegebene Textklasse bestimmen. Unterstützte Klassen sind: TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME. IME-Autoren: Wenn die Klasse keine ist, die Sie verstehen, nehmen Sie TYPE_CLASS_TEXT ohne Variation oder Flags an. "
ToolmakerSteve
6

Grundsätzlich wird der Eingabetyp EditText verwendet, um den Eingabetyp festzulegen in Ihrem EditText festzulegen.

Die möglichen Werte für android:inputtypesind:

  • Text
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • Nummer
  • numberSigned
  • numberDecimal
  • Telefon
  • Terminzeit
  • Datum
  • Zeit

Dann können Sie einen beliebigen Wert verwenden, wie im Beispiel gezeigt:

<EditText android:id="@+id/EditText01"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 android:inputType="number"
 android:text="1212223"/>
Paresh Mayani
quelle
3
Vielen Dank! Ich konnte nicht einmal die Google Android-Dokumentation finden, in der all dies aufgelistet ist!
Gimmegimme
4

Asus Tablet hat diese Funktion, sie haben die Standardtastatur angepasst. Und die Tastatur enthält nur die Zahlen und Alphabete. Ich denke, Ihre Anforderungslösung besteht auch darin, die Standardtastatur anzupassen

Shaista Naaz
quelle
2

Sie können der Antwort von Paresh Mayani folgen.

Und als Hinweis können Sie android:inputType="textPhonetic"für den inputType Text und die Nummer basierend auf der Benutzerauswahl verwenden.

Hoffe du wirst meinen Standpunkt verstehen.

Shreyash Mahajan
quelle
2

Führen Sie in OnCreate in Activity Folgendes aus:

    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) {

        }
    });

In diesem Fall geben Sie is ein numberund Android zeigt die numerische Tastatur an, aber Sie können eingeben, was Sie wollen. Sie können auch andere Methoden überschreiben, wie Sie möchten.

Dilix
quelle
Haben Sie es im Querformat versucht, wenn sich die Tastatur im Vollbildmodus befindet?
OneWorld
2

So habe ich es erreicht ...

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

Es werden nur durch Ziffern angegebene Zeichen zugelassen.

Bitte beachten Sie, dass die gezeigte Tastatur die des Dialers ist und nicht die typische Tastatur. Für mich hat es das erreicht, was ich brauchte, um vollständig im XML zu arbeiten.

Slaman
quelle
1
Mischen Sie keine Eingabeklassen. Sie werden immer zu Zahlen führen. Siehe stackoverflow.com/questions/3544214/…
OneWorld
Danke Slamn, ich musste nur ganze Zahlen und "-" / Minus-Operator
Gimmegimme
2

In diesem Fall sollten Sie keinen inputType-Filter verwenden. Fügen Sie einfach die folgende Zeile in Ihre EditText-Eigenschaft ein

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

Jetzt dürfen nur diese Zeichen in den EditText eingegeben werden. Der vollständige Code Ihres Edittext lautet wie folgt:

<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">

Naveed Ahmad
quelle
1
Perfekte Lösung ! Danke !
BSQ
1

Warum nicht einfach eine Umschalttaste haben, die entweder:

  • Legt den Eingabetyp so fest, dass nur numerische Werte zulässig sind
  • Legt den Eingabetyp fest, um die Verwendung der QWERTZ-Tastatur zu ermöglichen
  • Oder stellen Sie andere Eingabetypen ein (falls erforderlich)

Auf diese Weise können Sie den Ziffernblock auf die Standardeinstellung setzen und ihn dann durch Drücken einer Taste ändern.

dabaerju
quelle
1

Das ist nicht möglich angesichts der aktuellen Standard-Android-Eingabetypen für verschiedene Telefone .

Es gibt viele mögliche Hacks , dass die Arbeit an einigen Tastaturen , aber nicht auf andere , wie das gemeinsame Verfahren zur Herstellung der Roh - Eingangstyp eingestellt werden, die üblicherweise in den Antworten enthalten ist:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

Der beste Rat, den ich finden konnte, ist die Verwendung des textPostalAddressEingabetyps in Ihrem XML:

  • android:inputType="textPostalAddress"

Leider ist dies nicht tun , was wir es tun wollen noch , aber vielleicht wird es in der Zukunft . Der einzige Vorteil davon ist, dass die Metainformationen in Ihrem Bearbeitungsfeld Ihre Absichten widerspiegeln.

Richard Le Mesurier
quelle
1

Programmatisch ist es mit ein wenig Anpassung an den üblichen Ablauf möglich. Zuerst müssen Sie editText wie folgt einstellen:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

Dann müssen Sie auf keyevent warten. Stellen Sie beim Drücken von Pfund den InputType erneut auf InputType.TYPE_CLASS_TEXT ein. Dies sollte so funktionieren, wie es für mich funktioniert.

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;
              }
         }
     }
}  
Saurav
quelle
0

Sie können versuchen, --- einzustellen

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

für weitere Beschreibung

Swati
quelle
1
Configuration.KEYBOARD_QWERTY == InputType.TYPE_CLASS_NUMBER == 2
Enyby
0

Entfernen Sie in Ihrem Code für textView den "Text" in android: inputType.

Es sollte sein,

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />
Frau B.
quelle
Dies löst sein Problem nicht. Er möchte Buchstaben und Zahlen mit
Zifferntastatur
0

Sie können dies programmgesteuert tun:

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

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

setInputType (int type) Legt den Typ des Inhalts mit einer Konstante fest, die für inputType definiert ist.

jmcdonnell40
quelle
0

Wie Saurav sagt, ist der beste Weg, mit einem einfachen Listener zwischen QWERTY Keyboard und Numeric Keyborad zu wechseln:

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;
    }
});
oskarko
quelle
0

Ich versuche alle Methoden, aber nicht perfekt. Ich habe also eine andere Idee. Funktioniert perfekt für alle Tastaturen.

 @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);
        }
    }
}
Rico Teng
quelle
-2

Fügen Sie in Ihrem XML-Layout für EditText diesen Parameter hinzu:

android:inputType="number|text"

Auf diese Weise kann der Benutzer sowohl Text als auch Zahlen eingeben und enthält die Logik in der XML, anstatt Code in Ihrer Aktivität oder Ihrem Fragment zu haben.

Sam Bains
quelle
3
Mischen Sie keine Eingabeklassen. Sie werden immer zu Zahlen führen. Siehe stackoverflow.com/questions/3544214/…
OneWorld