2012-05-09 17 views
39

Quando inizia il mio frammento, voglio mettere a fuoco il mio edittext/lasciare che l'utente inizi a digitarlo. Sono in grado di metterlo a fuoco con requestFocus(), ma non riesco a far apparire la tastiera.Mostra tastiera per edittext all'avvio del frammento

Ho provato sia questo:

edit = (EditText) view.findViewById(R.id.search); 
edit.requestFocus(); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 

e

edit = (EditText) view.findViewById(R.id.search); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 
edit.requestFocus(); 

Come posso ottenere la tastiera a presentarsi per EditText?

+0

Questo è ciò che ha funzionato per me - [http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629](http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629) – v01d

+0

La mia reputazione è troppo basso per commentare th e domanda. Ho risposto [qui] (http://stackoverflow.com/a/43807917/5390932) con un metodo per controllare quando mostrare o nascondere la tastiera – Catapimba

risposta

77

Funziona?

imgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
+0

Se hai problemi a chiuderlo usa un altro [questi metodi] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromInputMethod%28android.os.IBinder,%20int%29) – Sam

+2

Questo sembra una soluzione alternativa. La procedura corretta dovrebbe essere proposta come OP o chiamare 'imgr.showSoftInput (getView(), InputMethodManager.SHOW_IMPLICIT)'. Toggle in realtà * chiuderà * la tastiera se è già aperta. La soluzione descritta è l'unica che ho avuto modo di lavorare, quindi questo è un bug nel framework? Sarebbe gradita una soluzione o una spiegazione migliore. – Nilzor

+0

@Nilzor So che il tuo commento è un po 'vecchio, ma recentemente ho avuto lo stesso problema e ho trovato questo bug report https://code.google.com/p/android/issues/detail?id=25812. Può essere correlato, non ho visto molto dal team Android su di esso, quindi non sono sicuro che abbia priorità. – MikeIsrael

0

Come Nilzor detto questo funziona

imgr.showSoftInput(getView(), InputMethodManager.SHOW_IMPLICIT) 

e sono d'accordo che è una soluzione migliore rispetto toogleSoftInput

+1

Non funziona per tutti i casi. – cesards

6

Si può provare questo

@Override 
public void onResume() { 
    super.onResume(); 
    edit.post(new Runnable() { 
     @Override 
     public void run() { 
      edit.requestFocus(); 
      InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imgr.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT); 
     } 
    }); 
} 
+0

Questa soluzione ha funzionato con me anche se non ho avuto bisogno di fare la cosa edit.post, ho solo aggiunto le 3 linee all'interno di run() al metodo di ripresa direttamente. –

+1

Non funziona per tutti i casi. – cesards

0

Un altro modo per rendere la tastiera aprire quando il frammento inizia è chiamare requestFocus() in onCreateView e reagire accor dingly aprendo la tastiera se e solo se lo EditText è focalizzabile.

if(this.editText.requestFocus()) 
{ 
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 
+1

Non funziona per tutti i casi. – cesards

0
@Override 
public void onHiddenChanged (boolean hidden) 
{ 
    super.onHiddenChanged(hidden); 

    if(hidden) 
    { 
     hideKeyboard(yourView); 
    } 
    else 
    { 
     toggleKeyboard(yourView); 
    } 
} 

    public static void toggleKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    v.requestFocus(); 

    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS); 
} 

public static void hideKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
-1

questo articolo mi ha aiutato

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment_edit_name, container); 
    editText = (EditText) view.findViewById(R.id.txt_yourName); 
    editText.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(
         LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    return view; 
} 

https://turbomanage.wordpress.com/2012/05/02/show-soft-keyboard-automatically-when-edittext-receives-focus/

2

Dato che l'utilizzo showSoftInput non funziona per tutti i casi e dopo aver provato alcune delle soluzioni qui menzionati, come:

if (binding.account.requestFocus()) { 
    getActivity().getWindow() 
     .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 

ho finalmente fatto funzionare usando:

if (binding.account.requestFocus()) { 
    ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 
} 

dal:

binding.account.requestFocus() 

richiedere solo il punto di riferimento per l'EditText (non si apre la tastiera)

e

((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 

è l'unico soluzione che sembra funzionare correttamente per mostrare la tastiera (e la più votata)

Buona fortuna!:-)

0

Semplicemente, con l'aggiunta di 2 linee funzionerà come un fascino:

Se si utilizza XML

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

Else in Java:

view.setFocusableInTouchMode(true); 
view.requestFocus(); 
Problemi correlati