Programmatic Hide / Show Android Soft Keyboard [duplicar]

Posible duplicado:
Cerrar / ocultar el teclado suave de Android

Primero lo primero que ya viest hilo. Intenté los métodos aceptados dados allí ... Pero nada funcionó para mí ...

Tengo dos pantallas en mi aplicación.

Primero uno tiene 2 EditText's - Uno para nombre de usuario y otro para contraseñal 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 que el teclado esté visible .. Esta es mi implementación (simplificada al eliminar 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()
}

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

Ahora asegunda pagin .. Ya dije que tengo un ListView y EditText allí .. Quiero que mi teclado se oculte en el inicio solo para que aparezca cuando el usuario toque editText..¿Puedes creerlo? lo que sea que probésoft Keyboard se muestra cuando cargo 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);
   }
}

Simplifica

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

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

RESULTADO FINA

Bueno, lo hice funcionar, con la ayuda de todos los amigos aquí.

1. Para mostrar el teclado al iniciar

Dos respuestas funcionaron para mí. @One proporcionado por @CapDroid, que es usar 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);

Dyarish proporciona @Segundas respuestas. De hecho, 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 principio. Y no lo he probado porque tenía cero votos en un hilo en el que todas las otras publicaciones tienen muchos votos ... Altura de locura ...

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

Para mí, la segunda solución parecía ordenada, 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 el foco a EditText ... Pero no lo he probado, pero debería funcionar. No está bien, aunque ..

2. Para ocultar el teclado en la actividad, comience

Solo una respuesta funcionó para mí, la cual es proporcionada por @Dyarish. Y la solución es usar la configuración focusableInTouchMode en xml para el diseño que contiene 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> 

e todos modos, termino usando la respuesta de Dyarish en ambos casos. Así que le estoy otorgando la recompensa a él ... Gracias a todos los otros amigos que intentaron ayudarme ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta