इसलिए मुझे लगता है कि जो एक आम समस्या लगती है, वह यह है कि मेरे संवाद बॉक्स में EditText फोकस होने पर दिखाई नहीं देता है। मैंने कई वर्कअराउंड्स देखे हैं, जैसे कि इस थ्रेड में , यह एक और यह एक (और कई और अधिक), लेकिन मैंने कभी भी इसके लिए संतोषजनक स्पष्टीकरण नहीं देखा कि यह पहले स्थान पर क्यों हो रहा है।
मैं अपने खुद के निर्माण की तुलना में EditTexts के लिए अपने स्वयं के डिफ़ॉल्ट व्यवहार का उपयोग करना पसंद करूंगा, लेकिन ऐसा लगता है कि सभी (उन थ्रेड्स में) ने स्वीकार किया है कि Dialogs में EditTexts के लिए डिफ़ॉल्ट व्यवहार सिर्फ एक कर्सर देने के लिए है और कोई कीबोर्ड नहीं है। ऐसा क्यों होगा?
रिकॉर्ड के लिए, इनमें से कोई भी वर्कअराउंड मेरे लिए काम नहीं करता है - निकटतम मैं आने में सक्षम हूं जो संवाद बॉक्स के नीचे दिखाई देने के लिए एक कीबोर्ड को मजबूर कर रहा है (InputMethodManager.toggleSoftKeyboard (*) का उपयोग करके)। मेरा विशेष कॉन्फ़िगरेशन API15 है, EditText एक AlertDialog के भीतर एक ListView पर पाद लेख में दिखाता है। EditText Android: focusable = "true" सेट किया गया है, और onFocusChangeListener पर फोकस ईवेंट्स प्राप्त हो रहे हैं।
संपादित करें:
जैसा कि अनुरोध किया गया है, यहां विशिष्ट कोड स्निपेट है, जिसके साथ मैं काम कर रहा हूं। मैं पूरे लेआउट के साथ परेशान नहीं करूँगा, लेकिन इस विशिष्ट अनुप्रयोग में, EditText डायलॉग पर एक बटन दबाने के लिए ( एक एक्शन दृश्य के समान ) दिखाई देता है। यह एक RelativeLayout में निहित है जो डिफ़ॉल्ट रूप से दृश्यता "चला गया" है:
<RelativeLayout
android:id="@+id/relLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<ImageButton
android:id="@+id/cancelBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@color/transparent"
android:src="@drawable/cancelButton"
android:layout_margin="5dp"/>
<ImageButton
android:id="@+id/okBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/cancelBut"
android:background="@color/transparent"
android:src="@drawable/okButton"
android:layout_margin="5dp" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:focusable="true"
android:layout_toLeftOf="@id/okBut"/>
</RelativeLayout>
इसे बनाने वाला कोड सापेक्ष दृश्य की दृश्यता को "दृश्यमान" सेट करता है (और अन्य UI तत्वों को छुपाता है)। EditText के साथ मेरे अनुभव के आधार पर जब EditText केंद्रित हो जाता है, तो कीबोर्ड को खींचने के लिए यह पर्याप्त होना चाहिए । हालाँकि, किसी कारण से यह मामला नहीं है। मैं निम्नलिखित onFocusChangeListener सेट कर सकते हैं:
edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// For whatever reason we need to request a soft keyboard.
InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE);
if(hasFocus)
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus."));
}
}
});
इस कॉन्फ़िगरेशन का उपयोग करते हुए, जब मैं पहली बार EditText दर्ज करता हूं , onFocusChangedListener ट्रिगर करता है, और एक लॉग बनाता है जो हमेशा इस तरह दिखता है:
Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.
कीबोर्ड दिखाता है और फिर गायब हो जाता है, शायद इसलिए कि मैं इसे दो बार टॉगल करता हूं, लेकिन जब भी मैं यह सुनिश्चित करता हूं कि यह ऊपर रहता है, तो यह संवाद विंडो (एक ग्रे आउट क्षेत्र) के पीछे है, और संवाद को बंद किए बिना इसे प्राप्त करने का कोई तरीका नहीं है। ।
उस ने कहा, मैं इस बात पर जोर देना चाहता हूं कि भले ही मैं इस काम को करने में सक्षम हो जाऊं , लेकिन मैं मुख्य रूप से एक साधारण कारण खोजने में दिलचस्पी रखता हूं कि एडिट टेक्स्ट पहले स्थान पर क्यों नहीं चल रहा है, और यह क्यों इतनी आम बात लगती है!