android: windowSoftInputMode = "stateVisible" не работает - PullRequest
9 голосов
/ 18 марта 2012

Я хотел бы открыть программную клавиатуру, когда начинается действие, и обнаружил, что

android:windowSoftInputMode="stateVisible" 

не работает.

Чтобы убедиться, что я создал новый проект (по умолчанию «Hello world») и сделал следующее:

  1. добавил windowSoftInputMode в манифест.
  2. После того, как это не сработало, я добавил поле EditView к макету
  3. После того, как это не сработало, я добавил

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) кПроцедура onCreate.

Я скомпилировал его с Android2.3.3 и попытался запустить его на своем устройстве Galaxy S2 и эмуляторе Android4 и до сих пор - без клавиатуры.

Мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="9" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity
        android:name=".HelloworldActivity"
        android:label="@string/app_name"
        android:windowSoftInputMode="stateVisible">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Мой макет main.xml:

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <requestFocus />

</EditText>

Мой код:

public class HelloworldActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

    }
}

Ответы [ 4 ]

3 голосов
/ 26 марта 2012

Это простая вещь. Я сделал это, и это работает как ваше требование.

  1. Не делайте ничего с манифестом, оставьте все как есть при создании нового проекта.

  2. Теперь определите inputmanager.

    public static InputMethodManager imm;
    imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
    
  3. Теперь зарплата EditText - это мой EditText, и я показываю клавиатуру в начале этого действия.

    salaryEditText.setHint("select Salary/Wage");
    
    salaryEditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)}); // Ignore this line
    
    if(!(imm==null))
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,1);
    

Это поможет вам показать клавиатуру во время начала активности.

Чтобы закрыть клавиатуру по окончании упражнения, см. Код ниже:

белый код, пока вы завершаете упражнение.

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

Надеюсь, это решит вашу проблему. Если нет, то дайте мне знать.

Наслаждайтесь. :)

2 голосов
/ 25 марта 2012

Используете ли вы стандартную клавиатуру Android? Если вы это сделаете, попробуйте на другом устройстве, я знаю, что это имеет некоторые проблемы

1 голос
/ 22 марта 2012

Как я обнаружил здесь , вы можете показать клавиатуру, когда начинается действие, выполнив следующее:

    EditText editText = (EditText) findViewById(R.id.editText1);
    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

Я изменил их пример кода, чтобы иметь идентификатор вашего EditText, чтобы он работал

0 голосов
/ 23 марта 2012

Вы можете сначала принудительно сфокусироваться на представлении EditText, запустив:

final EditText edit = (EditText) findViewById(R.id.editText1);
edit.post(new Runnable() {
    @Override
    public void run() {
        edit.requestFocus();
    }
});

Это должно открыть клавиатуру при запуске активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...