Как скрыть клавиатуру и программно обновить EditTextPreference?

Я пытаюсь реализовать настройку активности в соответствии с инструкциями. у меня есть EditTextPreference что я хочу сохранить, но вместо того, чтобы позволить пользователю вводить любое значение, значение должно прийти через Bluetooth (у меня есть готовая часть Bluetooth).

В тот момент, когда EditTextPreference нажата, она показывает всплывающее окно редактора с кнопками ОК и Отмена. Вот как я хочу, чтобы я мог справиться с OK или же Cancel Нажмите на события.

1) Первая проблема состоит в том, что клавиатура также появляется - я не хочу этого, потому что значение должно исходить из фона. Я добавил эти свойства, но, кажется, ничто не влияет на скрытие клавиатуры (даже если я переключаю их):

<EditTextPreference
    android:selectable="true"
    android:enabled="true"
    android:editable="true"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:cursorVisible="false"
    android:capitalize="words"
    android:inputType="none"
    android:maxLines="1"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:title="@string/pref_title_id" />

2) Вторая проблема: как мне обновить значение EditTextPreference Исходя из кода, пользователь не должен ничего вводить, а просто посмотреть значение и нажать "ОК" или "Отмена"?

3) Третья проблема / вопрос: можно ли сохранять значения в базе данных вместо использования общих настроек? По сути, я хочу иметь общий интерфейс настроек, но сохраняю значения в базе данных.

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

3 ответа

Для обновления EditTextPreference установите этот флажок EditTextPreference.setText(значение), который не обновляется должным образом

Для отключения ввода =>

setFocusableInTouchMode(boolean)
setFocusable(boolean)

Попробуйте следующий код в методе onCreate вашей деятельности, чтобы клавиатура всплывала только тогда, когда пользователь нажимает EditText.

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

или же

использование android:windowSoftInputMode="stateHidden" в Android Mainfest.xml под activity тег

Чтобы скрыть Keybord, вызовите этот метод в вашем событии onClick

 private void hideKeyboard() {

            View view = getCurrentFocus();
            if (view != null) {
                ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).
                        hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

    }

1. Когда вы нажимаете на поле редактирования, вы должны вызвать этот метод, который скрывает клавиатуру.

 private void hideKeyboard() {
    View view = getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
 }
}
  1. Для установки значения в editText используйте метод:

     editTextPreferences.setText("Your value");
    
  2. Для сохранения только значения вы можете использовать Shared Preference, потому что он более гибкий, но если вы хотите сохранить больше данных и иметь все в БД, вы можете использовать SQLite db. Оба они сохраняют локальные значения, потому что, когда приложение удаляется, они удаляются.

Другие вопросы по тегам