Автоматическое отображение программной клавиатуры в диалоговом окне. - PullRequest
1 голос
/ 06 декабря 2010

У меня есть простое действие, которое использует android:theme="@android:style/Theme.Dialog" в манифесте.

Моя деятельность состоит из EditText, 2 кнопок и TextView. Это не более чем поле для ввода пользователем имени и нажатия OK / Отмена.

Я просто хочу сфокусировать EditText и сделать так, чтобы программная клавиатура автоматически отображалась при запуске Activity. Я читал бесчисленные посты об этом, но я просто не могу заставить его работать. Когда начинается действие, в EditText появляется мигающий курсор, но клавиатура не отображается, пока я не щелкну внутри него.

Вот моя активность:

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

Я также пробовал это в onCreate:

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

Редактировать: Мой манифест для справки

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

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Следующее должно работать. Перейдите в манифест и обновите строку активности с атрибутом android:windowSoftInputMode.

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

См. Следующую страницу документации для получения дополнительной информации о различных параметрах, которые могут быть переданы в этот атрибут.

Я проверил вышеупомянутое, и оно прекрасно работает для меня. Вот мой ужасно простой пример. Код:

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

Компоновка:

<?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>
1 голос
/ 26 марта 2012

Попробуйте эту работу для меня

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