डिफ़ॉल्ट रूप से संख्या कीपैड के साथ EditText, लेकिन वर्णमाला वर्णों की अनुमति


83

मेरे पास एक EditText बॉक्स है और मैं चाहता हूं कि डिफ़ॉल्ट कीबोर्ड जो तब आता है जब इसे संख्यात्मक कीपैड के रूप में चुना जाता है, क्योंकि अधिकांश उपयोगकर्ता संख्याओं में प्रवेश करेंगे। हालाँकि, मैं उपयोगकर्ताओं को वर्णमाला के वर्णों में भी प्रवेश करने की अनुमति देना चाहता हूँ, अगर उन्हें आवश्यकता हो। का उपयोग android:inputType="number"अंकों की केवल करने के लिए सीमाओं के इनपुट। आपके पास कौन से विकल्प हैं?


2
नमस्ते आपको समाधान मिल गया है? यदि हाँ तो कृपया इसे साझा करें। मुझे इसे लागू करना होगा
बंसल_ स्नेहा

क्या आप चाहते हैं कि उपयोगकर्ता केवल संख्यात्मक के साथ शुरू हो और फिर 1 से अधिक अंकों के बाद वह अल्फ़ान्यूमेरिक में प्रवेश करने की अनुमति दे सकता है?
dhuma1981


संभव डुप्लिकेट। इसी तरह के पोस्ट
hrk_er

जवाबों:


17

इस तरह से अपने XML में अपने EditText को परिभाषित करें:

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

आउटपुट: Android: inputType = "textVanishPassword"

संख्याओं की एक पंक्ति और शेष अक्षर।


3
यह चुना हुआ उत्तर होना चाहिए!
ताश पेमहिवा

यह कीबोर्ड पर निर्भर करता है। मेरे मामले में Google कीबोर्ड और नूगाट के अंतिम संस्करणों के साथ काम नहीं करता है।
फायरबी 86

क्या आपने समस्या तय की
अश्विन एस अशोक

this._editText.setInputType (InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); this._editText.setTypeface (Typeface.DEFAULT); मेरे लिए काम करता है
xevser

@ fireb86 यह Gboard के नवीनतम संस्करण के साथ काम करता है। और इसका काम ओरेओ पर पूरी तरह से ठीक है।
टिम जॉन

11

मैं एक अधिक मजबूत समाधान सुझाऊंगा:

उपयोगकर्ता को इनपुट प्रकार चुनने की क्षमता के साथ प्रस्तुत करें:

आवश्यक फ़िक्स

- इनपुट चयन बटन दिखाने / छिपाने की बेहतर हैंडलिंग

- इनपुट प्रकार अक्षर होने पर संभवतः सुझावों को हटा दें

यहां छवि विवरण दर्ज करें

यहाँ गतिविधि है:

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

}

यहाँ गतिविधि 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>

यदि संख्या inputTypes में से एक है और कीबोर्ड फुलस्क्रीन मोड (लैंडस्केप) में है, तो अक्षर छिप जाते हैं। TEXT इनपुट टाइप पर वापस जाते समय, वे फिर से दिखाई देते हैं।
OneWorld

10

यहाँ आप क्या देख रहे हैं:

EditTextअपने xml में इस तरह परिभाषित करें :

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

</EditText>

और अपने में कॉल करें onCreate():

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

जब भी आप अपने EditTextअब क्लिक करते हैं, तो आप अंक और अक्षर दर्ज कर सकते हैं ! (डिजिट कीबोर्ड पहले दिखाया गया है)


3
नेक्सस 7 पर मेरे लिए इसने संख्यात्मक पैड दिखाया लेकिन इसका सामान्य कीबोर्ड दिखाने का कोई तरीका नहीं था।
रोब

होनहार लग रहा था, लेकिन अगर संख्या inputTypes में से एक है और कीबोर्ड फुलस्क्रीन मोड (लैंडस्केप) में है, तो पत्र छिपे हुए हैं।
OneWorld

8

दुर्भाग्य से यह संभव नहीं है, क्योंकि एक EditText के लिए केवल एक इनपुट टाइप सेट किया जा सकता है। निम्नलिखित केवल बटनों पर वर्णमाला दिखाएंगे।

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

हालाँकि, मैं आपको क्या सुझाव दे सकता हूं, अपने इनपुट प्रकार को संख्यात्मक पर सेट करें, और बस अपने छोटे से स्विचबोर्ड बटन को फॉर्म के करीब से जोड़ दें। और इसके onClick को सेट करें

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

ताकि उपयोगकर्ता वर्णमाला के अक्षरों पर भी स्विच कर सकें।


उस कारण के लिए दस्तावेज़ में निहित है निरंतर नामों पर एक करीब से नज़र डालें। आप केवल एक वर्ग को एक भिन्नता और एक ध्वज के साथ जोड़ सकते हैं। की तरह TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNEDलेकिन आप कभी भी क्लास को नहीं मिला सकते numberऔर जैसेtext
OneWorld

प्रलेखन निश्चित रूप से यह नहीं बताता है कि कक्षाएं मिश्रित नहीं हो सकती हैं। इसके बारे में शिकायत करने वाला कोई लिंट चेक नहीं है। और उदाहरण के लिए number|text(ऊपर देखें) का संयोजन करते समय एक विशिष्ट कीबोर्ड भी है, जिसका अर्थ है कि आप लंबे प्रेस के माध्यम से पत्र दर्ज कर सकते हैं, वास्तव में काम नहीं करता है। बल्कि मेरे लिए छोटा लग रहा है, या कम से कम अधूरा है।
masc3d

@ masc3d - सहमत डॉक्टर यह नहीं कहते कि यह कहाँ होना चाहिए। इनका वर्णन इनपुटटाइप के तहत किया गया है TYPE_MASK_CLASS: बिट्स का मुखौटा जो दिए जा रहे पाठ के समग्र वर्ग को निर्धारित करता है। समर्थित कक्षाएं हैं: TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME। IME लेखक: यदि वह वर्ग जिसे आप समझ नहीं रहे हैं, तो TYPE_CLASS_TEXT को किसी भिन्नता या झंडे के साथ न मानें। "
टूलमेकर

6

असल में, EditText inputtype का उपयोग आपके EditText में इनपुट प्रकार सेट करने के लिए किया जाता है ।

इस के लिए संभावित मान android:inputtypeहैं:

  • टेक्स्ट
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • Texturi
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • संख्या
  • numberSigned
  • numberDecimal
  • फ़ोन
  • दिनांक और समय
  • दिनांक
  • समय

फिर आप उदाहरण में दिखाते हुए किसी भी मूल्य का उपयोग कर सकते हैं:

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

3
धन्यवाद! मैं Google Android दस्तावेज़ भी नहीं ढूँढ सका, यह सब सूचीबद्ध करता है!
जिम्मीगमे

4

Asus टैबलेट में वह सुविधा है, उन्होंने डिफ़ॉल्ट कीबोर्ड को अनुकूलित किया है। और कीबोर्ड में केवल संख्याएँ और अक्षर होते हैं। मुझे लगता है कि डिफ़ॉल्ट कीबोर्ड को अनुकूलित करने के लिए आपका आवश्यकता समाधान भी है


2

आप परेश मेयानी के जवाब का अनुसरण कर सकते हैं।

और android:inputType="textPhonetic"उपयोगकर्ता चयन के आधार पर आप इनपुट टाइप टेक्स्ट और नंबर के लिए उपयोग कर सकते हैं ।

आशा है आपको मेरी बात अच्छी लगेगी।


2

गतिविधि में OnCreate में ऐसा करें:

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

        }
    });

इस मामले में आप टाइप करते हैं numberऔर एंड्रॉइड संख्यात्मक कीबोर्ड दिखाएगा, लेकिन आप जो चाहें इनपुट कर सकते हैं। साथ ही आप अपनी इच्छानुसार अन्य तरीकों को भी ओवरराइड कर सकते हैं।


क्या आपने इसे परिदृश्य में आज़माया, जब कीबोर्ड फ़ुलस्क्रीन मोड में है?
OneWorld

2

यहाँ है कि मैंने इसे कैसे हासिल किया ...

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

केवल अंकों द्वारा निर्दिष्ट वर्णों को अनुमति दी जाएगी।

कृपया ध्यान दें कि दिखाया गया कीबोर्ड डायलर का है, न कि ठेठ कीबोर्ड का। मेरे लिए, इसने वह हासिल किया जिसकी मुझे पूरी तरह से XML के भीतर जरूरत थी।


1
इनपुट कक्षाओं का मिश्रण न करें। वे हमेशा संख्या में परिणाम देंगे। देखें stackoverflow.com/questions/3544214/…
OneWorld

धन्यवाद स्लैम, मुझे केवल पूरे नंबरों और "-" / माइनस ऑपरेटर का उपयोग करने की आवश्यकता है
gimmegimme

2

आपको इस मामले में किसी भी इनपुट टाइप फिल्टर का उपयोग नहीं करना चाहिए, बस अपनी एडिट टेक्स्ट प्रॉपर्टी में नीचे की लाइन जोड़ें

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

अब केवल इन वर्णों को EditText में प्रवेश करने की अनुमति होगी। आपके संपादन का पूरा कोड इस तरह होगा:

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


1
सही समाधान! धन्यवाद !
बीएसक्यू

2

क्रमिक रूप से यह थोड़ा प्रवाह के साथ सामान्य प्रवाह के लिए संभव है। सबसे पहले आपको editText को इस प्रकार सेट करना होगा:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

फिर आपको कीवेंट के लिए सुनना होगा। पाउंड के दबाने पर InputType को फिर से InputType.TYPE_CLASS_TEXT पर सेट करें। यह काम करना चाहिए क्योंकि यह मेरे लिए काम करता है।

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

सिर्फ टॉगल बटन क्यों नहीं है:

  • केवल संख्यात्मक मानों की अनुमति देने के लिए इनपुट प्रकार सेट करता है
  • QWERTY कीबोर्ड के उपयोग की अनुमति देने के लिए इनपुट प्रकार सेट करता है
  • या अन्य इनपुट प्रकार सेट करें (यदि आवश्यक हो)

इस तरह, आप संख्यात्मक कीपैड को डिफ़ॉल्ट रूप से सेट कर सकते हैं, फिर उपयोगकर्ता एक बटन दबाकर इसे बदल सकता है।


1

यह विभिन्न फोनों में वर्तमान डिफ़ॉल्ट Android इनपुट प्रकारों के लिए संभव नहीं है

कई संभावित हैक हैं जो कुछ कीबोर्ड पर काम करते हैं लेकिन दूसरों पर नहीं , जैसे कच्चे इनपुट प्रकार को सेट करने की सामान्य विधि जो आमतौर पर उत्तरों में शामिल होती है:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

सर्वोत्तम सलाह जो मुझे मिल सकती है वह यह है कि textPostalAddressआपके XML में इनपुट प्रकार का उपयोग करें :

  • android:inputType="textPostalAddress"

दुर्भाग्य से यह वह नहीं करता है जो हम चाहते हैं कि यह अभी तक हो , लेकिन शायद यह भविष्य में होगा । इसका एकमात्र लाभ यह है कि आपके संपादन बॉक्स पर मेटा जानकारी दर्शाती है कि आप क्या चाहते हैं।



0

टेक्स्टव्यू के लिए अपने कोड में, एंड्रॉइड में "टेक्स्ट" हटाएं: inputType।

यह होना चाहिए,

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

इससे उसकी समस्या हल नहीं हो रही है। वह नंबर कीबोर्ड के साथ अक्षरों और संख्याओं की अनुमति देना चाहता है
OneWorld

0

आप इस प्रोग्राम को कर सकते हैं:

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

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

setInputType (int type) इनपुट के लिए परिभाषित कंटेंट के प्रकार को स्थिरांक के साथ सेट करें।


0

जैसा कि सौरव कहते हैं, एक सरल श्रोता के साथ QWERTY कीबोर्ड और न्यूमेरिक कीबोरॉड के बीच सबसे अच्छा तरीका बदल रहा है:

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

मैं सभी विधि की कोशिश करता हूं, लेकिन सही नहीं। इसलिए मेरे पास एक और विचार है। सभी कीबोर्ड के लिए सही काम।

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

-2

EditText के लिए अपने xml लेआउट में यह पैरामीटर जोड़ें:

android:inputType="number|text"

यह उपयोगकर्ता को पाठ और संख्या दोनों में प्रवेश करने की अनुमति देगा और आपकी गतिविधि या खंड में कोड होने के बजाय xml में तर्क सम्‍मिलित करेगा।


3
इनपुट कक्षाओं का मिश्रण न करें। वे हमेशा संख्या में परिणाम देंगे। देखें stackoverflow.com/questions/3544214/…
OneWorld
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.