Как заставить клавишу ввода работать в диалоге EditTextPreference - PullRequest
1 голос
/ 30 января 2012

Я установил android:singleLine="true" на EditTextPreference, и когда в окне редактирования в диалоговом окне появляется фокус, вместо клавиши Enter на программной клавиатуре появляется кнопка «Готово». Однако, если я нажимаю кнопку «Готово», закрывается только программная клавиатура, и мне все равно приходится нажимать кнопку «Готово» в диалоговом окне.

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

Ответы [ 3 ]

7 голосов
/ 19 марта 2012

Сначала я установил для параметра IME значение IME_ACTION_DONE

.
mEditTextPreference.getEditText().setImeOptions(EditorInfo.IME_ACTION_DONE);

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

mEditTextPreference.getEditText().setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE){
            //mEditTextPreference.setText(mEditTextPreference.getEditText().getText().toString());

            //better solution
            mEditTextPreference.onClick(mEditTextPreference.getDialog(), Dialog.BUTTON_POSITIVE);
            mEditTextPreference.getDialog().dismiss();
            return true;
        }
        return false;
    }
});
0 голосов
/ 07 марта 2016

Я думаю, что DialogPreference с EditText обычно всегда закрывается, когда пользователь нажимает кнопку Готово и закрывается программная клавиатура.Чтобы сделать это поведение по умолчанию, легко реализовать настроенный EditTextPreferenceCustomized, а затем использовать его везде вместо стандартного EditTextPreference.

import android.app.Dialog;
import android.content.Context;
import android.preference.EditTextPreference;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class EditTextPreferenceCustomized extends EditTextPreference
{
    public EditTextPreferenceCustomized(Context context)
    {
        super(context);
    }

    public EditTextPreferenceCustomized(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public EditTextPreferenceCustomized(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onAddEditTextToDialogView(View dialogView, EditText editText)
    {
        super.onAddEditTextToDialogView(dialogView, editText);

        // editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - uncomment if it's not specified in preferences.xml

        editText.setOnEditorActionListener(new OnEditorActionListener()
        {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
            {
              if(actionId == EditorInfo.IME_ACTION_DONE)
              {
                onClick(getDialog(), Dialog.BUTTON_POSITIVE);
                getDialog().dismiss();
                return true;
              }
              return false;
            }
        });
    }
}

Код частично основан на полезном решении @LZN, ноэто устранит необходимость установки слушателя действия для каждого предпочтения в коде Java.Просто замените в файлеferences.xml все экземпляры от EditTextPreference до com.yourpackage.EditTextPreferenceCustomized.

0 голосов
/ 30 января 2012

Вы пробовали using android:inputType="textCapSentences" (textCapSentences - один из многих вариантов) в XML для текста редактирования. У меня была похожая проблема, и она смогла решить ее, а также дала мне контроль над клавиатурой, которую я мог показать.

Например, если бы у меня было поле только для цифр, я мог бы использовать android:inputType="number", который бы сначала отображал цифровую клавиатуру против qwerty-клавиатуры, есть много разных вариантов

...