2010-12-05 4 views
1

J'ai une activité simple qui utilise un android:theme="@android:style/Theme.Dialog" dans le manifeste.Afficher automatiquement le clavier logiciel dans une activité de dialogue

Mon activité consiste en un EditText, 2 boutons et un TextView. Ce n'est rien de plus qu'une boîte pour l'utilisateur d'entrer un nom et appuyez sur OK/Annuler.

Je veux juste faire la mise au point de l'EditText et faire en sorte que le clavier virtuel s'affiche automatiquement lorsque l'activité est démarrée. J'ai lu d'innombrables articles à ce sujet, mais je n'arrive pas à le faire fonctionner. Lorsque l'activité commence, le curseur clignotant apparaît dans l'EditText, mais le clavier ne s'affiche pas jusqu'à ce que je clique dessus.

Voici mon activité:

public class Finalize extends Activity { 

    private EditText mEditName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.finalize_dialog); 

     mEditName = (EditText) findViewById(R.id.file_name_edit); 
     mEditName.setFocusable(true); 
     mEditName.requestFocus(); 

     mEditName.setOnFocusChangeListener(new View.OnFocusChangeListener() {   
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      } 
     }); 
    } 
} 

J'ai aussi essayé cela en onCreate:

InputMethodManager mgr = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); 
    mgr.showSoftInput(mEditName, 0); 

Edit: Mon manifeste pour référence

<activity class=".Finalize" 
     android:name=".Finalize" 
     android:label="@string/file_name_title" 
     android:theme="@android:style/Theme.Dialog" 
     android:screenOrientation="portrait"   
     android:windowSoftInputMode="stateAlwaysVisible"> 
    </activity> 

Répondre

2

Ce qui suit devrait fonctionner. Accédez à votre manifeste et mettez à jour votre ligne d'activité avec l'attribut android:windowSoftInputMode.

<activity android:name=".Finalize" 
    android:windowSoftInputMode="stateAlwaysVisible"> 
    ... 
</activity> 

Voir la page suivante pour documentation plus de détails sur les différents paramètres qui peuvent être transmis dans cet attribut.

J'ai testé ce qui précède et cela fonctionne très bien pour moi. Voici mon exemple terriblement simple. code:

public class DialogActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   
    } 
} 

Mise en page:

<?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="fill_parent"> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 
    <EditText android:id="@+id/edit_text_test" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

Manifest:

<activity android:name=".DialogActivity" 
       android:windowSoftInputMode="stateAlwaysVisible" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.Dialog"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+0

Malheureusement, cela ne fonctionne pas. – user432209

+0

Y a-t-il une raison particulière pour laquelle vous utilisez une activité à thème comme une boîte de dialogue au lieu de simplement lancer une boîte de dialogue? – Thomas

+0

@ user432209 Votre périphérique de test dispose-t-il d'un clavier physique? – Thomas

1

Essayez ce son travail pour moi

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 
Questions connexes