Ocultar / Mostrar programaticamente o teclado virtual Android [duplicado]

Possible Duplicate:
Fechar / ocultar o teclado virtual Android

Primeira coisa que eu já viest fio. Eu tentei métodos aceitos dados lá .. mas nada funcionou para mim ..

Tenho duas telas no meu aplicativo.

Primeiro, temos 2 EditText's - um para nome de usuário e outro para senha O segundo tem um ListView e um EditText - para filtrar o listView

Na minha primeira tela, quero que o nome de usuário EditText tenha foco na inicialização e o Teclado fique visívelsta é a minha implementação (simplificada removendo códigos desnecessários / não 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()
}

Bem, o teclado não está aparecendo na inicialização. E meu design exige muito um teclado lá ..

Agora parasecond page .. Eu já disse que tenho um listView e EditText lá ..Eu quero que meu teclado fique oculto na inicialização para que apareça quando o usuário tocar no editText..Você acredita nisso? o que eu tentei teclado @soft está aparecendo quando carrego a atividade .. eu não sou capaz de esconder ..

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);
   }
}

Para simplifica

Na página de login (primeira página) Quero que meu teclado fique visível na inicialização. No SecondPage Quero que o teclado seja oculto primeiro, apenas para aparecer quando o usuário tocar em editText

E meu problema é que estou recebendo exatamente o oposto nas duas ocasiões ... Espero que alguém tenha enfrentado esse problema antes ... BTT Estou testando no simulador e no telefone HTC Desire ..

RESULTADO FINAL

Bem, eu consegui funcionar, com a ajuda de todos os amigos aqu

1. Para mostrar o teclado na inicialização

Duas respostas funcionaram para mim.Um fornecido pelo @CapDroid, que é usar um manipulador e publicá-lo com atraso ..

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);

s respostas @Second são fornecidas por @Dyarish. Na verdade, ele vinculou a outro segmento SO, que eu não tinha visto antes. Mas o engraçado é que, essa solução é fornecida no tópico que referenciei no início. E ainda não experimentei porque tinha zero votos em um tópico em que todas as outras postagens tinham muitos votos .. Altura de tolice ..

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

Para mim, a segunda solução parecia legal, então decidi ficar com ela ... mas a primeira certamente funciona. A resposta de @ Dyarish também contém um truque inteligente do uso de um ScrollView abaixo de EditText para dar ao EditText o foco ... Mas eu não tentei, mas deve funcionar. Não é legal ..

2. Para ocultar o teclado na atividade, inicie

Apenas uma resposta funcionou para mim, fornecida pela @Dyarish. E a solução é usar as configurações focusableInTouchMode em xml para o layout que contém os editText. Isso fez o truque

<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 qualquer forma, acabo usando a resposta de Dyarish nos dois casos. Então, eu estou concedendo a recompensa a ele .. Obrigado a todos os outros amigos que tentaram me ajudar ..

questionAnswers(4)

yourAnswerToTheQuestion