प्रारंभ गतिविधि पर कीबोर्ड को स्वचालित रूप से पॉप अप करना


97

मुझे एक साधारण सा प्रश्न मिला। मेरे पास उनमें बहुत सारे EditText की गतिविधि है। जब मैं गतिविधि को खोलता हूं तो यह स्वचालित रूप से पहले EditText पर केंद्रित हो जाता है और वर्चुअल कीबोर्ड प्रदर्शित करता है।

मेरे द्वारा इसे कैसे रोका जा सकता है?


इस सवाल पर मेरे उत्तर की जाँच करें stackoverflow.com/questions/39593324/…
Android सहायता

जब मेरा ऐप लॉन्च होता है (खुला) और यदि संपादित करें पाठ दृश्य उपलब्ध है, तो कीबोर्ड स्वचालित (शो) सक्षम है। कैसे इस समस्या को हल करने के लिए यहाँ क्लिक करें easycomacademy.com/…
अहमदुल्लाह अहमद

जवाबों:


209

XML फ़ाइल में अपने लेआउट टैग में इस विशेषता का उपयोग करें:

android:focusable="true"
android:focusableInTouchMode="true"

जैसा कि टिप्पणियों में अन्य सदस्यों द्वारा बताया गया है, ScrollViewइसलिए यह काम नहीं करता है, इसलिए आपको इन विशेषताओं को मुख्य बच्चे के साथ जोड़ना होगा ScrollView


3
इससे मेरा मुद्दा भी ठीक हो गया। मैंने इसे अपनी गतिविधि के लिए RelativeLayout टैग में जोड़ा है। धन्यवाद!
ल्यूक

21
दिलचस्प रूप से पर्याप्त है, यह तब काम नहीं करता था जब मैंने ऊपर को स्क्रॉलव्यू में जोड़ा था, लेकिन इसने लिनारेयआउट के लिए काम किया
जेरी ब्रैडी

1
मुझे लगता है कि आपको इसे सबसे ऊपरी लेआउट पर रखना होगा
उत्सव गुप्ता

इसलिए मुझे लगता है कि यह काम करता है क्योंकि आप खुद लेआउट को बता रहे हैं कि यह फोकस हो सकता है? अन्यथा यह मानता है कि फॉर्म पर पहले नियंत्रण पर ध्यान देने की आवश्यकता है? अजीब तरह से पर्याप्त है, मुझे कीबोर्ड मिल रहा था भले ही मेरे फॉर्म पर सभी नियंत्रण अक्षम थे। अभी तय किया है। धन्यवाद!
क्राउनगनैम्ब

1
यह ध्यान रखना महत्वपूर्ण है कि यह समाधान पहुंच संबंधी समस्याएं पैदा करता है (एक ऐसा दृश्य जिसे फोकस होने के रूप में ध्यान केंद्रित नहीं किया जाना चाहिए) और अनपेक्षित परिणाम हो सकते हैं।
रेनैटो

96

आप इसे अपने Android मैनिफ़ेस्ट गतिविधि में जोड़ सकते हैं:

android:windowSoftInputMode="stateHidden|adjustResize"

यह काम करता है, हालांकि अगर आपकी एक छवि पृष्ठभूमि है और आप अपने सॉफ्ट कीबोर्ड को इस तरह की छवि की पृष्ठभूमि के सिकुड़ने से चिंतित हैं, तो उपयोग करेंandroid:windowSoftInputMode="stateHidden|adjustPan"
ArtiomLK

31

मेरे पास कई कार्यान्वयन यहां वर्णित हैं, लेकिन अब मैंने AndroidManifest.xmlअपनी Activityसंपत्ति के लिए जोड़ा है :

android:windowSoftInputMode="stateAlwaysHidden"

मुझे लगता है कि यह आसान तरीका है भले ही आप उपयोग कर रहे हों fragments

" StateAlwaysHidden " सॉफ्ट कीबोर्ड हमेशा छिपा रहता है जब गतिविधि की मुख्य विंडो में इनपुट फ़ोकस होता है।


इसने मेरे लिए एक स्क्रॉलव्यू और एक रिलेटिवलाईट दोनों के साथ काम किया।
iversoncru

यह टुकड़ों के लिए बहुत अच्छा नहीं है, क्योंकि आप "छिपी हुई स्थिति" को उस गतिविधि से जोड़ रहे हैं जिसमें आपके सभी टुकड़े होंगे, जिसका अर्थ है कि आप जिस भी टुकड़े को गतिविधि में प्रदर्शित करना चाहते हैं, वह संपत्ति से प्रभावित होगा (प्रति टुकड़े पर नहीं) "आधार)।
पेलपोथ्रोनिक

11

यदि आपके पास अपनी गतिविधि पर एक और दृश्य है जैसे ListView, आप यह भी कर सकते हैं:

ListView.requestFocus(); 

अपने onResume () से ध्यान आकर्षित करने के लिए editText

मुझे पता है कि इस सवाल का जवाब दिया गया है लेकिन सिर्फ एक वैकल्पिक समाधान प्रदान करना है जो मेरे लिए काम करता है :)



4

अपनी गतिविधि के कोड में इसका उपयोग करें:

@Override
public void onCreate(Bundle savedInstanceState) {

getWindow().setSoftInputMode(
   WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

}

यह मेरे लिए काम नहीं करता था - जब मैं अपनी गतिविधि शुरू करता हूं तो कीबोर्ड फिर भी पॉप अप हो जाता है।
डेविड डोरिया

आप इस लिंक को देख सकते हैं, यह काम करेगा: stackoverflow.com/questions/18977187/…
सुजीत कुमार गुप्ता

3

मुझे एक simular समस्या थी, यहां तक ​​कि जब स्विचिंग टैब भी कीबोर्ड स्वचालित रूप से पॉप अप हुआ और टैबलेट पर Android 3.2.1 के साथ बना रहा। निम्नलिखित विधि का उपयोग करें:

public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);
    if (isFocused) {
        searchEditText.requestFocus();
    } else {
        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
    }
}   

प्रत्येक संपादन के लिए गतिविधि के onCreate () और onPause () में:

setEditTextFocus (myEditText, false);

प्रत्येक EditText के लिए एक OnTouchListener:

    myEditText.setOnTouchListener(new EditText.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            setEditTextFocus(myEditText, true); 
            return false;
        }
    });

प्रत्येक EditTextमें OnEditorActionListener:

    myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
                            .......
            setEditTextFocus(myEditText, false); 
            return false;
        }
    });

और प्रत्येक EditTextमें layout xml:

            android:imeOptions="actionDone"
            android:inputType="numberDecimal|numberSigned" // Or something else

संभवतः अधिक कोड अनुकूलन संभव है।


3
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);

फ्रेग्मेंट का उपयोग करना .. कीबोर्ड को छिपाने के लिए कोड का काम ... जब एक फ्रेगमेंट ओपन एडिटेक्स फील्ड कीबोर्ड पर फोकस से बचता है ...
श्रीलाल एस

2

मुझे यह सरल समाधान मिला है जो मेरे लिए काम करता है। इन विशेषताओं को अपने मूल लेआउट में देखें:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >

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

इसके अलावा, हम इस तरह से फिर से मुख्य लेआउट पर ध्यान देकर बच्चे के विचारों को रनटाइम से हटा सकते हैं:

findViewById(R.id.mainLayout).requestFocus();

आशा है कि यह आपके लिए काम करेगा।


1

यह वह समाधान है जो मैं उपयोग कर रहा हूं, सबसे अच्छा समाधान नहीं है लेकिन यह मेरे लिए अच्छा काम कर रहा है

 editComment.setFocusableInTouchMode(false);
 editComment.setOnTouchListener(new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event)
                {
                    // TODO Auto-generated method stub
                    editComment.setFocusableInTouchMode(true);
                     editComment.requestFocus() ;
                    return false;
                }});

1

दिलचस्प बात यह है कि यह दस्तावेज https://developer.android.com/training/keyboard-input/visibility.html है है कि कहा गया है कि जब कोई गतिविधि शुरू होती है और टेक्स्ट फ़ील्ड पर ध्यान दिया जाता है, तो सॉफ्ट कीबोर्ड नहीं दिखाया जाता है (और फिर आगे बढ़ता है) यदि आप कुछ कोड के साथ चाहते हैं तो आपको यह दिखाया गया है कि कीबोर्ड कैसे दिखाया जाता है)।

मेरे सैमसंग गैलेक्सी S5 पर, यह है कि मेरा ऐप (बिना किसी प्रकट प्रविष्टि या विशिष्ट कोड के) काम करता है - कोई नरम कीबोर्ड नहीं। हालाँकि लॉलीपॉप AVD पर, एक सॉफ्ट कीबोर्ड दिखाया गया है - ऊपर दिए गए डॉक का उल्लंघन करते हुए।

यदि आपको AVD में परीक्षण करते समय यह व्यवहार मिलता है, तो आप वास्तविक डिवाइस पर परीक्षण करना चाहते हैं कि क्या होता है।


1

निम्नलिखित पोस्ट पर इसके कुछ अच्छे उत्तर हैं: EditText को गतिविधि स्टार्टअप पर ध्यान केंद्रित करने से रोकें । जो मैं नियमित रूप से उपयोग करता हूं वह मॉर्गन द्वारा निम्न कोड है :

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext"     
    android:nextFocusLeft="@id/autotext"/>

ध्यान दें: डमी आइटम को ध्यान देने योग्य तत्व से पहले रखा जाना चाहिए।

और मुझे लगता है कि इसे स्क्रॉलव्यू के साथ भी पूरी तरह से काम करना चाहिए और इसके लिए एक्सेसिबिलिटी के साथ कोई समस्या नहीं है।


0

यह तब होता है जब आपके EditText को स्वतः ही फोकस हो जाता है जब आप गतिविधि शुरू करते हैं। तो इसे ठीक करने का एक आसान और स्थिर तरीका, बस किसी अन्य दृश्य जैसे कि बटन आदि पर प्रारंभिक ध्यान केंद्रित करना है।

आप अपने लेआउट एक्सएमएल में ऐसा कर सकते हैं, कोड की आवश्यकता नहीं है।


0

स्वीकृत उत्तर मेरे लिए काम नहीं कर रहा है, इसीलिए उत्तर कार्य समाधान दें, हो सकता है कि यह मददगार हो!

EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();    
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

अब कीबोर्ड खुला आनंद है :)


सवाल यह था कि कीबोर्ड को खोलने से कैसे रोका जाए
jk7

0

एंड्रॉयड: windowSoftInputMode = "stateHidden | adjustResize"

अच्छा कर रहा है


0

गतिविधि के अपने शीर्ष पर नीचे दिए गए कोड को जोड़ें और सुनिश्चित करें कि View EditText के ऊपर है

<View 
android:layout_width="0dp"
android:layout_height="0dp"
android:focusableInTouchMode="true"/>

0

android:focusableInTouchMode="true"

उपरोक्त लाइन को xml में जोड़ें EditTextया TextInputLayoutजिसमें फ़ोकस है और जिसके कारण हैsoftInputKeyboard पॉप अप कर रहा है।

इससे हमारे लिए समस्या हल हो गई और अब कीबोर्ड पॉपअप नहीं है


0

search_edit_text = (EditText) findViewById (R.id.search_edit_text);

    search_edit_text.requestFocus();
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

यह मेरे लिए काम करता है दोस्तों टुकड़ा कुछ अलग वाक्यविन्यास हो सकता है। इस कार्य के लिए काम करता है


आपको अपने उत्तर में कोई सीमाएँ, मान्यताएँ या सरलीकृतियाँ प्रदान करने की आवश्यकता है। इस लिंक पर जवाब देने के तरीके के बारे में अधिक जानकारी देखें: stackoverflow.com/help/how-to-answer
Usama Abdulrehman

-1

अगर आपके विचार में EditText और Listview है तो कीबोर्ड डिफ़ॉल्ट रूप से खुल जाएगा। डिफ़ॉल्ट रूप से पॉपिंग से कीबोर्ड को छिपाने के लिए निम्न कार्य करें

this.listView.requestFocus();

सुनिश्चित करें कि आप editText के लिए दृश्य प्राप्त करने के बाद सूची पर ध्यान देने का अनुरोध कर रहे हैं।

उदाहरण के लिए

this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();

यदि आप इसे करते हैं, तो editText को फ़ोकस मिलेगा और कीबोर्ड पॉप अप होगा।


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