teclado studio pulsar programáticamente pantalla ocultar mostrar fuera edittext developer desactivar como cerrar abrir java android hide show soft-keyboard

java - studio - Programar/Ocultar/Mostrar el Teclado de Android



ocultar teclado android in fragment (4)

¿Intentaste InputMethodManager.SHOW_IMPLICIT en la primera ventana?

y para ocultarlo en la segunda ventana use InputMethodManager.HIDE_IMPLICIT_ONLY

EDITAR:

Si todavía no funciona, entonces probablemente lo estés colocando en el lugar equivocado. Reemplace onFinishInflate() y muestre / oculte allí.

@override public void onFinishInflate() { /* code to show keyboard on startup */ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT); }

Posible duplicado:
Cerrar / ocultar el teclado suave de Android

Primero lo primero ya vi este hilo. Intenté los métodos aceptados allí ... pero nada me funcionó ...

Tengo dos pantallas en mi aplicación.

  • El primero tiene 2 EditText''s: uno para el nombre de usuario y otro para la contraseña
  • El segundo tiene un ListView y un EditText - para filtrar el listView

En mi primera pantalla, quiero que el nombre de usuario EditText se centre en el inicio y el teclado debe estar visible. Esta es mi implementación (simplificada al eliminar los códigos innecesarios / no relacionados).

app_login.xml

<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="20dip" android:paddingRight="20dip"> <EditText android:id="@+id/username" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Username" android:imeOptions="actionDone" android:inputType="text" android:maxLines="1"/> <EditText android:id="@+id/password" android:password="true" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Password" /> </LinearLayout>

AppLogin.java

class AppLogin extends Activity{ private EditText mUserNameEdit = null; private EditText mPasswordEdit = null; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.app_login); mUserNameEdit = (EditText) findViewById(R.id.username); mPasswordEdit = (EditText) findViewById(R.id.password); /* code to show keyboard on startup.this code is not working.*/ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT); }//End of onCreate() }

Bueno, el teclado no se muestra al inicio . Y mi diseño requiere un teclado allí ...

Ahora a la segunda página ... Ya dije que tengo listView y EditText allí. Quiero que mi teclado esté oculto en el inicio solo para que aparezca cuando el usuario toca el editText ... ¿Puedes creerlo? todo lo que probé, el teclado suave se muestra cuando carga la actividad ... No puedo ocultarlo ...

app_list_view.xml

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout>

AppList.java

public class MyListActivity extends ListActivity{ private EditText mfilterEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_list_view); mFilterEditText = (EditText) findViewById(R.id.filter_edittext); InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0); } }

Simplificar

  1. En la página de inicio de sesión (primera página) quiero que mi teclado esté visible al inicio.
  2. En SecondPage quiero que el teclado se oculte primero, solo que aparezca cuando el usuario toca editText

Y mi problema es que estoy obteniendo exactamente lo contrario en ambas ocasiones ... Espero que alguien haya enfrentado este problema antes ... Estoy probando en el simulador y el teléfono HTC Desire

RESULTADO FINAL

Bueno, lo tengo funcionando, con la ayuda de todos los amigos aquí.

1. Para mostrar el teclado en el inicio

Dos respuestas funcionaron para mí. Uno proporcionado por @CapDroid, que consiste en utilizar un controlador y publicarlo con retraso.

mUserNameEdit.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(mUserNameEdit, 0); } },50);

La segunda respuesta es proporcionada por @Dyarish. De hecho, él se vinculó a otro hilo SO, que no he visto antes. Pero lo curioso es que, esta solución se da en el hilo al que hice referencia al inicio. Y no lo he probado porque tenía cero votos en un hilo donde todos los demás mensajes tienen un montón de votos ... Altura de tonterías ...

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Para mí, la segunda solución se veía limpia, así que decidí seguir con ella ... Pero la primera ciertamente funciona. Además, la respuesta de @Dyarish contiene un truco inteligente de usar un ScrollView debajo de EditText para darle a EditText el enfoque ... Pero no lo he intentado, pero debería funcionar. Aunque no limpio ...

2. Para ocultar el teclado al inicio de la actividad.

Solo una respuesta funcionó para mí, que es proporcionada por @Dyarish. Y la solución es usar la configuración focusableInTouchMode en xml para el diseño que contiene los editText. Esto hizo el truco

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:focusableInTouchMode="true"> <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout>

De todos modos acabo usando la respuesta de Dyarish en ambos casos. Así que le estoy otorgando la recompensa. Gracias a todos los otros amigos que intentaron ayudarme.


Agregando esto a su código android:focusableInTouchMode="true" se asegurará de que su teclado no aparezca en el inicio para su cuadro de edición de texto. Desea agregar esta línea a su diseño lineal que contiene el EditTextBox. Debes poder jugar con esto para resolver ambos problemas. He probado esto. Solución simple.

es decir: en su archivo app_list_view.xml

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:focusableInTouchMode="true"> <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout>

------------------ EDIT: Para hacer que el teclado aparezca en el inicio -----------------------

Esto es para hacer que el teclado aparezca en el nombre de usuario edittextbox en el inicio. Todo lo que he hecho es agregar una vista de desplazamiento vacía en la parte inferior del archivo .xml, esto pone el primer texto de edición en foco y abre el teclado. Admito que esto es un truco, pero asumo que solo quieres que esto funcione. Lo he probado, y funciona bien.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="20dip" android:paddingRight="20dip"> <EditText android:id="@+id/userName" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Username" android:imeOptions="actionDone" android:inputType="text" android:maxLines="1" /> <EditText android:id="@+id/password" android:password="true" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Password" /> <ScrollView android:id="@+id/ScrollView01" android:layout_height="fill_parent" android:layout_width="fill_parent"> </ScrollView> </LinearLayout>

Si está buscando una solución más elocuente, he encontrado this pregunta que podría ayudarle, no es tan simple como la solución anterior, pero probablemente sea una mejor solución. No lo he probado pero aparentemente funciona. Creo que es similar a la solución que probaste y que no te funcionó.

Espero que esto sea lo que buscas.

¡Aclamaciones!


Prueba este código.

Para mostrar Softkeyboard:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm != null){ imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); }

Para ocultar SoftKeyboard -

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm != null){ imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); }


ACTUALIZACIÓN 2

@Override protected void onResume() { super.onResume(); mUserNameEdit.requestFocus(); mUserNameEdit.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(mUserNameEdit, 0); } },200); //use 300 to make it run when coming back from lock screen }

Me esforcé mucho y encontré una solución ... cada vez que comienza una nueva actividad, el teclado no se puede abrir, pero podemos usar Runnable en onResume y está funcionando bien, así que intente este código y verifique ...

ACTUALIZACIÓN 1

añade esta linea en tu AppLogin.java

mUserNameEdit.requestFocus();

y esta linea en tu AppList.java

listview.requestFocus()''

después de esto, verifique su aplicación si no está funcionando, luego agregue esta línea en su archivo AndroidManifest.xml

<activity android:name=".AppLogin" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name=".AppList" android:configChanges="keyboard|orientation"></activity>

RESPUESTA ORIGINAL

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE);

para ocultar teclado

imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);

para mostrar el teclado

imm.showSoftInput(ed, 0);

para centrarse en EditText

ed.requestFocus();

donde ed es EditText