Android: CheckBoxPreference включает/отключает тип ввода адреса электронной почты (переопределяет настройки по умолчанию)

Привет всем, я пытаюсь сделать так, чтобы при включении CheckBox Preference (true) программно изменялся InputType на экранной клавиатуре. Я хочу, чтобы у пользователя была возможность включать/выключать параметр адреса электронной почты клавиатуры, сохраняя при этом уже установленный inputType.

По сути, это эквивалентно изменению:

android:inputType="textAutoCorrect|textCapSentences|textMultiLine"

to

android:inputType="typeAutoCorrect|textCapSentences|textmultiLine|textEmailAddress"

Настройки.xml

<CheckBoxPreference android:key="pref_key_enable_email"
                    android:title="@string/pref_title_enable_email"
                    android:summary="@string/pref_summary_enable_email"
                    android:defaultValue="false" />

Это то, что у меня есть на данный момент.

public void setInputType(int type) {
    boolean showEmail = false;
    // Show the Email keyboard if the pref_key_enable_email preference is TRUE
    mTextEditor = (EditText) findViewById(R.id.embedded_text_editor);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if(prefs.getBoolean("pref_key_enable_email",false)== true){
        showEmail = true;      
            if (showEmail) {
                mTextEditor.setInputType(InputType.TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS); w
           } else {
                mTextEditor.getInputType();
                }
            }

Я проверил /data/data/myappname/shared_prefs com.myappnamehere.preferences.xml. По крайней мере, я знаю, что логические значения do меняются с false на true, когда флажок установлен. Просто ничего не делает :(


person FatTony    schedule 30.04.2011    source источник


Ответы (1)


Попробуйте немного почистить свой код

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean showEmail = prefs.getBoolean("pref_key_enable_email",false);
mTextEditor = (EditText) findViewById(R.id.embedded_text_editor);

if(showEmail) {
    mTextEditor.setInputType( mTextEditor.getInputType() | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
}

Я предполагаю, что у вас есть флаги «по умолчанию» в xml для вашего макета:

android:inputType="textAutoCorrect|textCapSentences|textMultiLine" 
person aromero    schedule 30.04.2011
comment
Спасибо за ваш вклад. Да, у меня установлены эти флаги по умолчанию. Но изменение кода не привело ни к чему другому — inputType остался прежним. Также в качестве примечания последняя строка должна иметь InputType. добавлено до TYPE_TEXT_VARIATION_EMAIL, в остальном все удалось разрешить правильно. - person FatTony; 01.05.2011