2012-03-21 13 views
7

में संपादन टेक्स्ट में डिफ़ॉल्ट फोकस और कीबोर्ड डिफ़ॉल्ट रूप से उपयोगकर्ता को टेक्स्ट के लिए संकेत देने के लिए मैं एंड्रॉइड में AlertDialog.Builder का उपयोग कर रहा हूं। संवाद दिखाता है और बहुत अच्छा काम करता है, लेकिन उपयोगकर्ता को सॉफ्ट कीबोर्ड लोड करने के लिए EditText फ़ील्ड पर क्लिक करना होगा। क्या कीबोर्ड खोलने का कोई तरीका है और जब भी मेरा संवाद खोला जाता है तो ध्यान दें?एंड्रॉइड AlertDialog

final Map<String,Object> rowData = itemList.get(mPosition); 
        final EditText input = new EditText(searchList.getContext()); 
       input.requestFocus(); 


       input.setSingleLine(); 
       final AlertDialog dialog = new AlertDialog.Builder(searchList.getContext()) 
       .setTitle(StringUtils.getSafeString(rowData.get("label"))) 
       .setView(input) 
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         rowData.put("value", StringUtils.getSafeString(input.getText())); 
         searchList.invalidateViews(); 

        } 
       }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         // Do nothing. 
        } 
       }).create(); 
       dialog.show(); 

उत्तर

12

उपयोग निम्न कोड के अंदर: यहाँ मेरी कोड है। यह मेरे लिए काम किया।

editText.setOnFocusChangeListener(new OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      editText.post(new Runnable() { 
       @Override 
       public void run() { 
        InputMethodManager inputMethodManager= (InputMethodManager) YourActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
       } 
      }); 
     } 
    }); 
    editText.requestFocus(); 
+0

बहुत बहुत धन्यवाद, यह पूरी तरह से काम करता है !! –

-2
अपने XML लेआउट में

कॉल

<requestFocus/> 

अपने डिफ़ॉल्ट EditText

<EditText 
android:blabla 
.... 
<requestFocus/> 
/> 
+1

AlertDialog.Builder एक एक्सएमएल लेआउट का उपयोग नहीं करता, यह केवल एक EditText कि कोड में बनाया गया था में ले जाता है।मैंने कई स्थानों पर जेनरेट किए गए एडिटटेक्स्ट पर अनुरोध फोकस करने का प्रयास किया है, और ऐसा लगता है कि मैं इसे जिस तरह से काम करना चाहता हूं। यह इस प्रश्न के लिए एक समाधान समाधान नहीं है। – cain

0

InputMethodManager IMM = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput (इनपुट विधि विधि .HOW_FORCED, 0); कुंजीपटल के उपयोग को छिपाने के लिए:

इनपुट मोड मैनेजर imm = (इनपुट मोड मैनेजर) getSystemService (Context.INPUT_METHOD_SERVICE) प्राप्त करें; imm.hideSoftInputFromWindow (view.getWindowToken(), 0);

या नीचे दिए गए कोड की कोशिश, लेकिन आप अपने edittext को

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) { 
      dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
     } 
    } 
}); 
5

छिपे हुए कुंजीपटल जब प्रोग्राम के रूप में एक Android संवाद में एक EditText पर ध्यान केंद्रित करने की स्थापना requestFocus() या सेट करना होगा।

मुझे यह समस्या भी थी और यह एक बहुत ही सरल फिक्स था - यहां मेरा सुझाया गया समाधान है। हालांकि यह मेरे लिए संवाद प्रारूपों पर काम करता है, मुझे कोई कारण नहीं दिखता कि यह आपके मामले में क्यों काम नहीं करेगा।

मूल रूप से सॉफ्ट कीबोर्ड ट्रिगर नहीं होता है क्योंकि दृश्य प्रोग्रामेटिक रूप से बनाया जा रहा है। DialogFragments पर Android दस्तावेज़ से

dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

:: वास्तविक ठीक बस onCreateDialog विधि में इस लाइन डालने गया था उपयोगकर्ता एक EditText पर केंद्रित है

हैं, तो नरम कुंजीपटल स्वचालित रूप से दिखाई देगा। हमारे प्रोग्रामेटिक फोकस के साथ ऐसा करने के लिए मजबूर करने के लिए, हम getDialog() प्राप्त करें। GetWindow()। SetSoftInputMode()। ध्यान दें कि कई विंडो ऑपरेशंस जो आपने पहले डायलॉग में किए थे, अभी भी डायलॉग फ्रैगमेंट में किए गए हो सकते हैं, लेकिन आपको GetDialog() को कॉल करना होगा। GetWindow() बस getWindow() के बजाय।

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    //setup your dialog builder and inflate the view you want here 
    ... 
    //Make sure your EditText has the focus when the dialog is displayed 
    edit.requestFocus(); 
    //Create the dialog and save to a variable, so we can set the keyboard state 
    Dialog dialog = builder.create(); 
    //now, set to show the keyboard automatically 
    dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    return dialog; 
} 
+1

जाने का रास्ता! यह स्वीकार्य उत्तर होना चाहिए। मैंने 'getWindow() सेट किया है। SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);' मेरे AppCompatDialog सबक्लास के कन्स्ट्रक्टर में। –

+0

dialog.getWindow() शून्य वापस आ सकता है –

0

एक कस्टम दृश्य का उपयोग करता है, तो आप इसे अधिक बार की जरूरत है

public class RequestFocusEditText extends AppCompatEditText { 
    private RequestFocusEditText self; 

    public RequestFocusEditText(final Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.self = this; 

     setOnFocusChangeListener(new OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       post(new Runnable() { 
        @Override 
        public void run() { 
        InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputMethodManager.showSoftInput(self, InputMethodManager.SHOW_IMPLICIT); 
       } 
      }); 
     } 
    }); 
    requestFocus(); 
    } 
} 
संबंधित मुद्दे