Android: программное создание окна настроек 2

В предыдущей статье я описал как можно программно создать окно с настроками. Сегодня разобрался как можно было создать поле ввода пароля проще, без использования методов трансформации текста. Для этоно надо использовать метод setInputType у объекта TextView:

  1. passPref.getEditText().setInputType(android.text.InputType.TYPE_CLASS_TEXT |
  2. android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD);

Первая константа TYPE_CLASS_TEXT означает что поле будет использоваться для ввода текста, вторая TYPE_TEXT_VARIATION_PASSWORD - что текст будет паролем и его надо маскировать.
Поле ввода с типом TYPE_TEXT_VARIATION_PASSWORD по умолчанию не использует словари для посказок при вводе текста:

а вот при использовании предыдущего способа
passPref.getEditText().setTransformationMethod(PasswordTransformationMethod.getInstance());)
такой баг был:

"Вручную" подсказки при вводе можно убрать выключив флаг TYPE_TEXT_FLAG_AUTO_COMPLETE из типов следующим образом:

  1. usernamePref.getEditText().setInputType(android.text.InputType.TYPE_CLASS_TEXT ^
  2. android.text.InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);

Получится следующее:

В итоге код для создания страницы настроек принял следующий вид:

  1. package net.galanov.android.preferencesdemo;
  2.  
  3. import android.os.Bundle;
  4. import android.preference.EditTextPreference;
  5. import android.preference.PreferenceActivity;
  6. import android.preference.PreferenceScreen;
  7.  
  8. public class Preferences extends PreferenceActivity {
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setPreferenceScreen(createPreferenceHierarchy());
  13. }
  14.  
  15. private PreferenceScreen createPreferenceHierarchy() {
  16. // создаём корневой элемент для параметров - страницу preferences
  17. PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
  18.  
  19. // создаём диалог для ввода логина
  20. EditTextPreference usernamePref = new EditTextPreference(this);
  21. // устанавливаем заголовок для диалогового окна (Username)
  22. usernamePref.setDialogTitle(R.string.pref_username_dialog_title);
  23. // устанавливаем ключ для этого параметра, по нему потом пожно будет получить значение параметра
  24. usernamePref.setKey("username");
  25. // устанавливаем заголовк для элемента страницы
  26. usernamePref.setTitle(R.string.pref_username_title);
  27. // устаналиваем подпись для элемента страницы
  28. usernamePref.setSummary(R.string.pref_username_summary);
  29. // отключаем автозавершение
  30. usernamePref.getEditText().setInputType(android.text.InputType.TYPE_CLASS_TEXT ^ android.text.InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
  31. // добавляем элемент на страницу
  32. root.addPreference(usernamePref);
  33.  
  34. // аналогично добавляем элемент для воода пароля
  35. EditTextPreference passPref = new EditTextPreference(this);
  36. passPref.setDialogTitle(R.string.pref_password_dialog_title);
  37. passPref.setKey("password");
  38. passPref.setTitle(R.string.pref_password_title);
  39. passPref.setSummary(R.string.pref_password_summary);
  40.  
  41. // более правильный вариант - устанавливаем тип ввода - пароль с невидимыми символами
  42. passPref.getEditText().setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD);
  43. // добавлеяем элемент на страницу
  44. root.addPreference(passPref);
  45.  
  46. // возвращаем ссылку на созданную страницу
  47. return root;
  48. }
  49. }
Прикрепленные файлыРазмер
Инсталятор14.68 кб
Исходный код примера46.91 кб

Комментарии

Отправить комментарий

  • Доступны HTML теги: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Search Engines will index and follow ONLY links to allowed domains.

Подробнее о форматировании

Введите решение задачи