EditText प्रोग्राम के लिए inputType सेट करें?


216

हम प्रोग्राम टाइप के लिए इनपुट प्रकार को प्रोग्रामेटिक रूप से कैसे सेट करते हैं? मैं कोशिश कर रहा हूँ:

mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

इसका कोई असर नहीं दिख रहा है।

जवाबों:


213

TextView डॉक्स के अनुसार , एंड्रॉइड का प्रोग्रामेटिक संस्करण: पासवर्ड सेटट्रांसफॉर्मेशनमैथोड () है , न कि सेट इनपुटटाइप ()। तो कुछ इस तरह:

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());

चाल चलनी चाहिए।


4
बस इसे जोड़ने के लिए, आपको setInputType के बजाय setTransformationMethod को कॉल करना होगा । SetTransformationMethod के बाद setInputType को कॉल करना EditText को पासवर्ड मोड में फिर से नहीं होने का कारण बनता है।
पॉल रायलैंड

11
यह सवाल पूछे जाने के लिए गलत है। यह केवल दर्ज किए गए पाठ को रूपांतरित करता है EditText(पासवर्ड डॉट्स के साथ वर्ण बदलता है)। इस बात का कोई प्रभाव नहीं पड़ता है कि जो कुछ भी EditTextअपने आप में प्रवेश करने की अनुमति है, उस पर कोई प्रभाव नहीं पड़ता है।
slinden77

4
setInputType अंत में setTransformationMethod को कॉल करता है, इसलिए यदि आप TYPE_TEXT_VARIATION_PASSWORD सेट करने के लिए पास करते हैं, तो यह आपके लिए यह कर देगा। समस्या सेटइनिंगलीन को कॉल करने के बाद सेट करने में लगती है। इनपुटटाइप को सेट करने के बाद, जो सेट ट्रान्सफॉर्मेशनमेथोड को नल या सिंगल लाइन ट्रांसफॉर्मर के साथ कॉल करेगा और इस प्रकार पासवर्ड ट्रांसफार्मर को हटा देगा।
स्पार्क 3 3

कॉल सेट के बाद ट्रान्सफॉर्मेशनमेथोड (पासवर्डट्रांसफॉर्मेशन मैथोड.गेट इनस्टेंस ()) मैं इसे संपादित करने में सक्षम नहीं हो सकता
सुजीत एस

लेकिन अगली बार फ़ील्ड उपयोग किए जाने पर सुझाए गए पाठ में पासवर्ड दिखाई देगा
गैरी डेविस

408

प्रोग्रामटेक्स्ट के लिए इनपुट प्रकार को प्रोग्रामेटिक रूप से सेट करने के लिए, आपको यह निर्दिष्ट करना होगा कि इनपुट क्लास टाइप टेक्स्ट है।

editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

2
आपकी टिप मेरे लिए पूरी तरह से काम करती है! मुझे प्रोग्राम टाइप करने के लिए मल्टीलाइन पर इनपुट प्रकार सेट करने में समान समस्या थी।
अन्ना लैम

यहाँ एक बिटवाइज़ या ऑपरेटर होने का क्या महत्व है? क्षमा करें, मैं Android में नया हूं।
संजीव

मैं InputType से असहमत हूं। TYPE_TEXT_VARIATION_PASSWORD मेरे लिए काम नहीं करता है लेकिन setTransformationMethod (PasswordTransformationMethod.getInstance ()); कर देता है !
लुलिस फेलिसर्ट

38

यहाँ विभिन्न इनपुट प्रकार हैं जैसा कि मानक कीबोर्ड पर दिखाया गया है।

इनपुट प्रकार डेमो

प्रोग्राम प्रकार से इनपुट सेट करना

editText.setInputType(InputType.TYPE_CLASS_TEXT);

इसके अलावा अन्य विकल्प दस्तावेजTYPE_CLASS_TEXT में पाए जा सकते हैं ।

XML में इनपुट प्रकार सेट करना

<EditText
    android:inputType="text"
/>

इसके अलावा अन्य विकल्प दस्तावेजtext में पाए जा सकते हैं ।

पूरक कोड

यहाँ ऊपर की छवि के लिए कोड है।

public class MainActivity extends AppCompatActivity {

    EditText editText;
    TextView textView;
    List<InputTypeItem> inputTypes;
    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
        initArray();
    }

    public void onChangeInputTypeButtonClick(View view) {
        if (counter >= inputTypes.size()) {
            startOver();
            return;
        }
        textView.setText(inputTypes.get(counter).name);
        editText.setInputType(inputTypes.get(counter).value);
        editText.setSelection(editText.getText().length());
        counter++;
    }

    private void startOver() {
        counter = 0;
        textView.setText("");
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }


    private void initArray() {
        inputTypes = new ArrayList<>();
        inputTypes.add(new InputTypeItem("date",  InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE));
        inputTypes.add(new InputTypeItem("datetime", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("none", InputType.TYPE_NULL));
        inputTypes.add(new InputTypeItem("number",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("numberDecimal",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL));
        inputTypes.add(new InputTypeItem("numberPassword",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("numberSigned", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED));
        inputTypes.add(new InputTypeItem("phone",  InputType.TYPE_CLASS_PHONE));
        inputTypes.add(new InputTypeItem("text",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("textAutoComplete", InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE));
        inputTypes.add(new InputTypeItem("textAutoCorrect",  InputType.TYPE_TEXT_FLAG_AUTO_CORRECT));
        inputTypes.add(new InputTypeItem("textCapCharacters",  InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS));
        inputTypes.add(new InputTypeItem("textCapSentences",  InputType.TYPE_TEXT_FLAG_CAP_SENTENCES));
        inputTypes.add(new InputTypeItem("textCapWords",  InputType.TYPE_TEXT_FLAG_CAP_WORDS));
        inputTypes.add(new InputTypeItem("textEmailAddress",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textEmailSubject", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT));
        inputTypes.add(new InputTypeItem("textFilter",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER));
        inputTypes.add(new InputTypeItem("textLongMessage",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE));
        inputTypes.add(new InputTypeItem("textMultiLine",  InputType.TYPE_TEXT_FLAG_MULTI_LINE));
        inputTypes.add(new InputTypeItem("textNoSuggestions", InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS));
        inputTypes.add(new InputTypeItem("textPassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("textPersonName", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME));
        inputTypes.add(new InputTypeItem("textPhonetic",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PHONETIC));
        inputTypes.add(new InputTypeItem("textPostalAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS));
        inputTypes.add(new InputTypeItem("textShortMessage", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE));
        inputTypes.add(new InputTypeItem("textUri",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI));
        inputTypes.add(new InputTypeItem("textVisiblePassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD));
        inputTypes.add(new InputTypeItem("textWebEditText",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT));
        inputTypes.add(new InputTypeItem("textWebEmailAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textWebPassword", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD));
        inputTypes.add(new InputTypeItem("time", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME));
    }

    class InputTypeItem {
        private String name;
        private int value;
        InputTypeItem(String name, int value) {
            this.name = name;
            this.value = value;
        }
    }
}

यह सभी देखें


29

मैं सब के साथ हल है

.setInputType(InputType.TYPE_CLASS_NUMBER);

स्पष्ट डेटा और देखने के लिए

.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

डॉट्स देखने के लिए (यदि डेटा एक संख्या है, तो यह पसंद नहीं है अन्य वर्ग)


यह काम किया, धन्यवाद! एक प्रश्न थ, मुझे सादे पाठ से पासवर्ड प्रकार में बदलते समय 'या' जोड़ने की आवश्यकता क्यों है? मैं ऐसा क्यों नहीं कर सकता: .setInputType (InputType.TYPE_NUMBER_VARIATION_PASSWORD) ;? मैंने कोशिश की और यह काम नहीं किया।
अज्ञातयूजर

15

केवल संख्या की अनुमति देने के लिए:

password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);

पासवर्ड बदलना (छिपाना):

password1.setTransformationMethod(PasswordTransformationMethod.getInstance());

7
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

// आप अपनी आवश्यकता के अनुसार TYPE _... बदल सकते हैं।


5

कोटलिन के लिए:

    val password = EditText(this)
    password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
    password.hint = "Password"

4

यह मेरे जैसे अन्य लोगों के लिए मददगार हो सकता है जो पासवर्ड और फ्री-टेक्स्ट मोड के बीच टॉगल करना चाहते थे। मैंने सुझाए गए इनपुट विधियों का उपयोग करने की कोशिश की लेकिन यह केवल एक दिशा में काम करता है। मैं पासवर्ड से टेक्स्ट पर जा सकता था लेकिन फिर मैं वापस नहीं आ सकता था। टॉगल को संभालने की कोशिश करने वालों के लिए (जैसे एक शो पासवर्ड चेक बॉक्स) उपयोग

       @Override
        public void onClick(View v)
        {
            if(check.isChecked())
            {
                edit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                Log.i(TAG, "Show password");
            }
            else
            {
                edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
                Log.i(TAG, "Hide password");
            }
        }

समाधान के लिए मुझे इसका श्रेय देना होगा । काश मुझे वो कुछ घंटे पहले मिल जाता!


1

पासवर्ड अनहाइड करने के लिए:

editText.setInputType(
      InputType.TYPE_CLASS_TEXT|
      InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
);

पासवर्ड फिर से छिपाने के लिए:

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

0

इसे अपने लेआउट में EditText / TextView टैग में जोड़ने का प्रयास करें

android:password="true"

संपादित करें: मैं अभी आपकी पोस्ट को फिर से पढ़ता हूं, शायद आपको निर्माण के बाद ऐसा करने की आवश्यकता है। मैं नहीं देखता कि आपका स्निपेट काम क्यों नहीं करेगा।


मेरे पास इस मामले में कोई लेआउट फ़ाइल नहीं है, फ़ील्ड प्रोग्राम के अनुसार उत्पन्न हो रहे हैं।
user246114

हाँ, यह निर्माण के बाद किया जा रहा है, सुनिश्चित नहीं है कि यह काम क्यों नहीं कर रहा है!
user246114

6
यह विकल्प अब हटा दिया गया है !!
स्विफ्टबॉय

यह बात केवल एक है जो पुराने एंड्रॉइड 2.3 के लिए काम करती है, मैंने उत्तर को छोड़ दिया है।
djdance

0

मुझे पता है कि अपेक्षित उत्तर में है Java। लेकिन यहाँ मेरी सलाह के 2 सेंट हमेशा देखने के सामान XML(कम से कम बुनियादी सामान) में देखने की कोशिश करते हैं, इसलिए मैं xmlइस उपयोग के मामले को संभालने के बजाय एक विशेषता का उपयोग करने का सुझाव दूंगाjava

    <EditText
     android:inputType="textPassword"/>

2
कुछ मामलों में आप अलग-अलग इनपुट प्रकारों के बीच टॉगल करना चाहते हो सकते हैं जैसे किसी क्षेत्र में दर्ज पासवर्ड को छुपाना / दिखाना; जो मुझे इस पृष्ठ पर जाने देता है
विलियम

1
लेकिन इसके लिए EditText में एक विकल्प है कि चलो आपको पासवर्ड दिखाते हैं / इसे छिपाने की ज़रूरत नहीं है, इसे स्वयं भी करने की आवश्यकता है, यह इसके लिए एक अच्छा एनीमेशन देता है।
प्रतिमा केसरकर १३'१at

जानकारी के लिए धन्यवाद, मैंने इसे यहां देखा है stackoverflow.com/a/41163578/3310235
विलियम

0

छिपाना:

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);

प्रदर्शन:

edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);                    
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());

0
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.