2012-05-09 14 views
39

Cuando se inicia mi fragmento, quiero que mi texto de edición esté enfocado/deje que el usuario simplemente comience a escribirlo. Puedo enfocarlo con requestFocus(), pero no puedo hacer que aparezca el teclado.Mostrar el teclado para el texto de edición cuando comienza el fragmento

He intentado tanto esto:

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

y

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

¿Cómo puedo obtener el teclado se presenta para EditarTexto?

+0

Esto es lo que funcionó para mí - [http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629](http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629) – v01d

+0

Mi reputación es demasiado bajo para comentar th e pregunta Respondí [aquí] (http://stackoverflow.com/a/43807917/5390932) con un método para controlar cuándo mostrar u ocultar el teclado – Catapimba

Respuesta

77

¿Funciona?

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

Si tiene problemas para cerrarlo, use otro [estos métodos] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromInputMethod%28android.os.IBinder,%20int%29) – Sam

+2

Esto se siente como una solución. El procedimiento correcto debe ser como OP sugerido o para llamar a 'imgr.showSoftInput (getView(), InputMethodManager.SHOW_IMPLICIT)'. Alternar realmente cerrará * el teclado si ya está abierto. La solución descrita es la única a la que he llegado a trabajar, ¿es esto un error en el marco? Se agradecería una mejor solución o explicación. – Nilzor

+0

@Nilzor Sé que su comentario es un poco antiguo, pero recientemente tuve el mismo problema y encontré este informe de errores https://code.google.com/p/android/issues/detail?id=25812. Puede estar relacionado, aunque el equipo de Android no lo ha visto mucho, así que no estoy seguro de que tenga prioridad. – MikeIsrael

0

Como Nilzor dijo que esto funciona

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

y estoy de acuerdo que es una mejor solución que toogleSoftInput

+1

No funciona para todos los casos. – cesards

6

Puede probar este

@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

Esta solución funcionó conmigo aunque no necesité hacer lo de edit.post, solo agregué las 3 líneas dentro de su ejecución() directamente al método de reanudación. –

+1

No funciona para todos los casos. – cesards

0

Otra forma de hacer que el teclado abrir cuando se inicia el fragmento es llamar al requestFocus() en onCreateView y reaccionar de acuerdo dingly abriendo el teclado si y solo si el EditText es enfocable.

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

No funciona para todos los casos. – 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

este artículo me ha ayudado

@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

Dado que el uso showSoftInput no funciona para todos los casos y después de probar algunas de las soluciones mencionadas aquí, como:

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

finalmente lo hizo trabajar utilizando:

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

desde:

binding.account.requestFocus() 

única petición en el foco de la EditText (no se abre el teclado)

y

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

es el único solución que parece estar funcionando correctamente para mostrar el teclado (y el más votado)

¡Buena suerte!:-)

0

Simplemente, mediante la adición de 2 líneas funcionará como un encanto:

Si el uso de XML

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

Otras ventas en Java:

view.setFocusableInTouchMode(true); 
view.requestFocus(); 
Cuestiones relacionadas