मुझे एक साधारण सा प्रश्न मिला। मेरे पास उनमें बहुत सारे EditText की गतिविधि है। जब मैं गतिविधि को खोलता हूं तो यह स्वचालित रूप से पहले EditText पर केंद्रित हो जाता है और वर्चुअल कीबोर्ड प्रदर्शित करता है।
मेरे द्वारा इसे कैसे रोका जा सकता है?
मुझे एक साधारण सा प्रश्न मिला। मेरे पास उनमें बहुत सारे EditText की गतिविधि है। जब मैं गतिविधि को खोलता हूं तो यह स्वचालित रूप से पहले EditText पर केंद्रित हो जाता है और वर्चुअल कीबोर्ड प्रदर्शित करता है।
मेरे द्वारा इसे कैसे रोका जा सकता है?
जवाबों:
XML फ़ाइल में अपने लेआउट टैग में इस विशेषता का उपयोग करें:
android:focusable="true"
android:focusableInTouchMode="true"
जैसा कि टिप्पणियों में अन्य सदस्यों द्वारा बताया गया है, ScrollView
इसलिए यह काम नहीं करता है, इसलिए आपको इन विशेषताओं को मुख्य बच्चे के साथ जोड़ना होगा ScrollView
।
आप इसे अपने Android मैनिफ़ेस्ट गतिविधि में जोड़ सकते हैं:
android:windowSoftInputMode="stateHidden|adjustResize"
android:windowSoftInputMode="stateHidden|adjustPan"
मेरे पास कई कार्यान्वयन यहां वर्णित हैं, लेकिन अब मैंने AndroidManifest.xml
अपनी Activity
संपत्ति के लिए जोड़ा है :
android:windowSoftInputMode="stateAlwaysHidden"
fragments
।" StateAlwaysHidden " सॉफ्ट कीबोर्ड हमेशा छिपा रहता है जब गतिविधि की मुख्य विंडो में इनपुट फ़ोकस होता है।
https://stackoverflow.com/a/11627976/5217837 यह लगभग सही है:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
लेकिन यह SOFT_INPUT_STATE_ALWAYS_VISIBLE के बजाय SOFT_INPUT_STATE_HIDDEN होना चाहिए
अपनी गतिविधि के कोड में इसका उपयोग करें:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
मुझे एक 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
संभवतः अधिक कोड अनुकूलन संभव है।
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
मुझे यह सरल समाधान मिला है जो मेरे लिए काम करता है। इन विशेषताओं को अपने मूल लेआउट में देखें:
<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();
आशा है कि यह आपके लिए काम करेगा।
यह वह समाधान है जो मैं उपयोग कर रहा हूं, सबसे अच्छा समाधान नहीं है लेकिन यह मेरे लिए अच्छा काम कर रहा है
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;
}});
दिलचस्प बात यह है कि यह दस्तावेज https://developer.android.com/training/keyboard-input/visibility.html है है कि कहा गया है कि जब कोई गतिविधि शुरू होती है और टेक्स्ट फ़ील्ड पर ध्यान दिया जाता है, तो सॉफ्ट कीबोर्ड नहीं दिखाया जाता है (और फिर आगे बढ़ता है) यदि आप कुछ कोड के साथ चाहते हैं तो आपको यह दिखाया गया है कि कीबोर्ड कैसे दिखाया जाता है)।
मेरे सैमसंग गैलेक्सी S5 पर, यह है कि मेरा ऐप (बिना किसी प्रकट प्रविष्टि या विशिष्ट कोड के) काम करता है - कोई नरम कीबोर्ड नहीं। हालाँकि लॉलीपॉप AVD पर, एक सॉफ्ट कीबोर्ड दिखाया गया है - ऊपर दिए गए डॉक का उल्लंघन करते हुए।
यदि आपको AVD में परीक्षण करते समय यह व्यवहार मिलता है, तो आप वास्तविक डिवाइस पर परीक्षण करना चाहते हैं कि क्या होता है।
निम्नलिखित पोस्ट पर इसके कुछ अच्छे उत्तर हैं: 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"/>
ध्यान दें: डमी आइटम को ध्यान देने योग्य तत्व से पहले रखा जाना चाहिए।
और मुझे लगता है कि इसे स्क्रॉलव्यू के साथ भी पूरी तरह से काम करना चाहिए और इसके लिए एक्सेसिबिलिटी के साथ कोई समस्या नहीं है।
स्वीकृत उत्तर मेरे लिए काम नहीं कर रहा है, इसीलिए उत्तर कार्य समाधान दें, हो सकता है कि यह मददगार हो!
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));
अब कीबोर्ड खुला आनंद है :)
एंड्रॉयड: windowSoftInputMode = "stateHidden | adjustResize"
अच्छा कर रहा है
android:focusableInTouchMode="true"
उपरोक्त लाइन को xml में जोड़ें EditText
या TextInputLayout
जिसमें फ़ोकस है और जिसके कारण हैsoftInputKeyboard
पॉप अप कर रहा है।
इससे हमारे लिए समस्या हल हो गई और अब कीबोर्ड पॉपअप नहीं है
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));
यह मेरे लिए काम करता है दोस्तों टुकड़ा कुछ अलग वाक्यविन्यास हो सकता है। इस कार्य के लिए काम करता है
अगर आपके विचार में 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 को फ़ोकस मिलेगा और कीबोर्ड पॉप अप होगा।