Android studio edittextpreference только цифры

Android programmers blog

Simply about difficult

Поиск по этому блогу

понедельник, 4 февраля 2013 г.

Работа с настройками в Android

Сегодня я хочу с вами поделиться некоторым опытом работы с настройками в android. Это будет небольшой туториал для начинающих ну и собсно что-то такое куда можно будет заглянуть накануне когда понадобятся настройки и скопипастить нужный кусок к себе в проект.
Начну с того что для примера мы напишем недопрограмму в которой будет всего два файла: файл настроек и главная активность в которой будет показываться что выбрали. Все будет просто, на главной активносте будет поле текстовое в котором можно будет писать текст, и текствью который нам никак не пригодится. На активности будет меню для перехода в настройки.
Для начала создаем проект и открываем наш main.xml, сейчас мы туда впилим нашу разметку главной активити. Вот так вот она будет выглядеть:

Смотреться на телефоне в дневном режиме вот так будет:

Дальше в созданном MainActivity добавляем меню:

Далее нам нужно создать подпапочку res/xml и внутри этой папки создать файл prefs.xml. Начнем мы с CheckBoxPreference.

CheckBoxPreference

Тут мы добавили обычный чекбокс для включения или отключения ночного режима в программе на едит тексте.

Дальше создаем файл PrefsAcitivity, его мы унаследуем не просто от активити а от PreferenceActivity для того что бы он определялся как активность настроек и сохранял все что мы там будет вытворять. Он будет выглядеть вот так вот:

Дальше нужно добавить эту активность в AndroidManifest так как если не добавите то и не откроете её.

Теперь давайте добавим в нашу главную активность обработку этого чекбокса который мы создали в настройках. Для этого нам нужно создать метод onResume() в котором будем все это красотень обрабатывать. Далее я не буду приводить весь код, а только метод onResume() в котором собственно и будет все происходить.

Для начала нам нужно объявить переменные для работы с настройками и с нашим текстовым полем. В шапке файла MainActivity добавляем вот такие поля:

В onCreate() же нам нужно эти поля идентифицировать что бы их можно было использовать так что далее пишем

Ну а теперь создаем метод onResume() в самом низу нашего файла и начинаем оживлять нашу разметку.

Начнем мы с чекбокса, он у нас должен вводить и выводить в/из ночного режима, давайте это реализуем:

Теперь если вы запустите и попробуете поставить / убрать в настройках галочку у вас будет меняться фоновый цвет в едит тексте.

EditTextPreference

И так научились мы менять цвет поля из настроек давайте теперь научимся увеличивать шрифт из них. Для этого нам понадобится EditTextPreference который позволяет вводить нам произвольные числа и разный текст, но так как мы хотим ввести размер то будем вводить только цифры.

Все также как и в чекбоксе то же поля ключ, то же название и т.д. Как нам получить параметр который будет введен в поле EditTextPreferences? А вот так!

Читайте также:  Как с андроида через блютуз передать файлы

Вот таким образом мы получим цифры из текстбокса которые введет пользователь в настройках.
Выглядит вот так

ListPreference

Теперь мы хотим менять стиль текста, он у нас может быть жирный, курсивный, подчеркнутый и полужирный курсив. Для того что бы такое сделать нам нужно добавить в наши настройки ListPreference который позволяет создавать списки с радибаттонами или с чекбоксами.

Для того что бы создать список нам нужно создать массив этих вариантов. Создаем файл text_style.xml в папке res/values и пишем в нем вот такой вот массив:

Дальше в файле preferences.xml нам нужно создать ListPreferences и задать ему генерировать массив из этого файла.

Теперь наш preferences.xml будет выглядеть вот так:

Теперь для обработки этого элемента немного видоизменим наш onResume() добавим туда еще пару строк кода для обработки / чтения параметров.

Из комментариев понятно что и как тут происходит. Выглядеть вот так будет:

Ну теперь давайте добавим последний элемент который я очень долго искал но все таки нашел как его сделать, это кнопка перехода из настроек на другую активность, например вам захотелось в настройках добавить какую-то сложную функцию например как калибровка экрана, для этого вы создали активность и в ней делаете все что вам нужно, для того что бы перейти из настроек на эту активность вам нужно создать кнопку в preferences.xml.

И дальше в файле PrefsActivity нужно написать метод который будет обрабатывать клик, в нашем случае мы будем переходить обратно на нашу активность, но вообще это делается для скрытых настроек.

Собственно это все что я хотел рассказать про настройки, там еще есть уйма разных елементов но это основные которые я использовал и которые я буду использовать в дальнейшем. Спасибо за внимание, исходник проекта лежит ниже.

Сами настройки будут вот так выглядеть:

Скачать с GitHub & Скачать с Dropbox

Источник

EditTextPreference-только числовое значение inputType — не работает

Он по-прежнему показывает обычную клавиатуру и позволяет мне вводить любой символ

Что-то не так с android.support.v7 ?

8 ответов

Я надеюсь, что EditTextPreference принимает только значение между 6000 и 65536, как я могу это сделать? Спасибо! BTW, код а не работает, я не могу ввести ни одного числа в поле редактирования EditTextPreference, ключ которого равен WebServerPort

используйте это в edittext, так как он принимает только определенные числа. если он не работает, используйте библиотеку Android-Support-Preference-V7-Fix.

Исправлено EditTextPreference пересылает атрибуты XML (например, inputType) в EditText, как и исходное предпочтение.

В разделе Настройка параметров руководства разработчика по настройкам рекомендуется установить тип ввода программно с помощью OnBindEditTextListener следующим образом:

Я попытался определить тип ввода как «number» в xml и все равно получил обычную клавиатуру с буквами. Этот подход сработал для меня.

Я согласен, что в исходных настройках поддержки есть некоторые проблемы, но для решения этой проблемы нам просто нужно добавить пользовательский макет и указать EditText с android:inputType=»number»

Чтобы вы могли скопировать исходный файл preference_dialog_layout.xml и отредактировать его.

Я пытаюсь установить значение для элемента EditTextPreference с hostPreference.setText(Not yet set); Но текст не показывается Я хочу показать его как Use Name здесь public class HostSettingActivity extends PreferenceActivity < private final String MY_DEBUG_TAG = SettingActivity; SharedPreferences.

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

Это происходит при использовании android.support.v14.preference.PreferenceFragment или android.support.v7.preference.PreferenceFragmentCompat даже после выбора android:inputType=»numberDecimal» . Эту проблему можно решить с помощью android.preference.PreferenceFragment . К сожалению, он устарел в API уровне 28.

android.support.v7.preference.EditTextPreference не содержит метода getEditText() .

Но мы можем расширить android.support.v7.preference.EditTextPreferenceDialogFragmentCompat до inputType.

Читайте также:  Выдвижная панель android studio

Затем сделайте свою деятельность PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback

Используйте свой EditTextPreferenceDialogFragmentCompat вместо android.support.v7.preference.EditTextPreferenceDialogFragmentCompat

просто используйте android.support.v7.preference.EditTextPreference в xml

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

Подумал, что я добавлю свое решение для Android-TV на случай, если кто-то придет сюда и ему это понадобится. ответ android_su направил меня в правильном направлении, к сожалению, LeanbackEditTextPreferenceDialogFragmentCompat не поддерживает OnPreferenceDisplayDialogCallback . Вместо этого мне пришлось:

переопределите onCreateView и реализуйте новую функцию newInstance для LeanbackEditTextPreferenceDialogFragmentCompat с помощью наследования:

переопределить onPreferenceDisplayDialog внутри моего LeanbackSettingsFragmentCompat :

EditTextPreference виджеты должны принимать те же атрибуты, что и обычные EditText, поэтому используйте:

Похожие вопросы:

Я создал EditTextPreference и теперь хочу получить ценность от любой другой деятельности. Я много чего пробовал, но ничего не получалось. Где хранится это значение? Как я могу его вернуть? EDIT: я.

Я хочу проверить значение EditTextPreference , чтобы оно находилось внутри определенного диапазона int (скажем, от 1 до 22). Единственная часть, которую я мог проверить, была inputType (только.

Я хочу изменить inputType в моем EditPreferences:

Источник

EditTextPreference – только числовое значение inputType – не работает

Он по-прежнему показывает обычную клавиатуру и позволяет мне набирать любой символ

Что-то не так с android.support.v7 ?

используйте это в edittext, поскольку он принимает только определенные числа. если он не работает, используйте Android-Support-Preference-V7-Fix.

Исправлено редактирование EditTextPreference пересылает атрибуты XML (например, inputType) в EditText, как и исходное предпочтение.

android.support.v7.preference.EditTextPreference не содержит getEditText() .

Но мы можем расширить android.support.v7.preference.EditTextPreferenceDialogFragmentCompat чтобы установить inputType.

Затем сделайте вашу деятельность реализующей PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback

Используйте свой EditTextPreferenceDialogFragmentCompat вместо android.support.v7.preference.EditTextPreferenceDialogFragmentCompat

просто используйте android.support.v7.preference.EditTextPreference в xml

Вы можете получить EditText из Preference и оттуда setInputTypes или использовать KeyListeners, чтобы сообщить клавиатуре:

Я согласен с тем, что исходные параметры поддержки имеют некоторые проблемы, но для решения этой проблемы нам просто нужно добавить пользовательский макет и указать EditText с помощью android: inputType = “number”

Чтобы вы могли скопировать исходный файл preference_dialog_layout.xml и отредактировать его.

Это происходит при использовании android.support.v14.preference.PreferenceFragment или android.support.v7.preference.PreferenceFragmentCompat даже после выбора android:inputType=»numberDecimal» . Эта проблема может быть преодолена с помощью android.preference.PreferenceFragment. К сожалению, это устарело на уровне API 28.

Думаю, я бы добавил свое решение для Android-TV на случай, если кто-то попадет сюда и понадобится. Ответ android_su направил меня в правильном направлении, к сожалению, LeanbackEditTextPreferenceDialogFragmentCompat не поддерживает OnPreferenceDisplayDialogCallback . Вместо этого я должен был:

Переопределите onCreateView и реализуйте новую функцию newInstance для LeanbackEditTextPreferenceDialogFragmentCompat используя наследование:

переопределить onPreferenceDisplayDialog внутри моего LeanbackSettingsFragmentCompat :

Эй, попробуйте Это, чтобы вывести клавиатуру только с номерами

Виджеты EditTextPreference должны иметь те же атрибуты, что и обычный EditText, поэтому используйте:

Источник

EditTextPreference

java.lang.Object
android.preference.Preference
android.preference.DialogPreference
android.preference.EditTextPreference

Class Overview

A Preference that allows for string input.

It is a subclass of DialogPreference and shows the EditText in a dialog. This EditText can be modified either programmatically via getEditText() , or through XML by setting any EditText attributes on the EditTextPreference.

This preference will store a string into the SharedPreferences.

Summary

android:dialogIcon The icon for the dialog.
android:dialogLayout A layout to be used as the content View for the dialog.
android:dialogMessage The message in the dialog.
android:dialogTitle The title in the dialog.
android:negativeButtonText The negative button text for the dialog.
android:positiveButtonText The positive button text for the dialog.
android:defaultValue The default value for the preference, which will be set either if persistence is off or persistence is on and the preference is not found in the persistent storage.
android:dependency The key of another Preference that this Preference will depend on.
android:enabled Whether the Preference is enabled.
android:key The key to store the Preference value.
android:layout The layout for the Preference in a PreferenceActivity screen.
android:order The order for the Preference (lower values are to be ordered first).
android:persistent Whether the Preference stores its value to the shared preferences.
android:selectable Whether the Preference is selectable.
android:shouldDisableView Whether the view of this Preference should be disabled when this Preference is disabled.
android:summary The summary for the Preference in a PreferenceActivity screen.
android:title The title for the Preference in a PreferenceActivity screen.
android:widgetLayout The layout for the controllable widget portion of a Preference.
Читайте также:  Samsung galaxy ace обновление андроид
int DEFAULT_ORDER Specify for setOrder(int) if a specific order is not required.
Public Constructors
Public Methods

Public Constructors

public EditTextPreference (Context context, AttributeSet attrs, int defStyle)

public EditTextPreference (Context context, AttributeSet attrs)

public EditTextPreference (Context context)

Public Methods

public EditText getEditText ()

Returns the EditText widget that will be shown in the dialog.

Returns
  • The EditText widget that will be shown in the dialog.

public String getText ()

Gets the text from the SharedPreferences .

Returns

public void setText (String text)

Saves the text to the SharedPreferences .

Parameters

public boolean shouldDisableDependents ()

Checks whether this preference’s dependents should currently be disabled.

Returns
  • True if the dependents should be disabled, otherwise false.

Protected Methods

protected void onAddEditTextToDialogView (View dialogView, EditText editText)

Adds the EditText widget of this preference to the dialog’s view.

Parameters

protected void onBindDialogView (View view)

Binds views in the content View of the dialog to data.

Make sure to call through to the superclass implementation.

Parameters
view The content View of the dialog, if it is custom.

protected void onDialogClosed (boolean positiveResult)

Called when the dialog is dismissed and should be used to save data to the SharedPreferences .

Parameters
positiveResult Whether the positive button was clicked (true), or the negative button was clicked or the dialog was canceled (false).

protected Object onGetDefaultValue (TypedArray a, int index)

Called when a Preference is being inflated and the default value attribute needs to be read. Since different Preference types have different value types, the subclass should get and return the default value which will be its value type.

For example, if the value type is String, the body of the method would proxy to getString(int) .

Parameters
a The set of attributes.
index The index of the default value attribute.
Returns
  • The default value of this preference type.

protected void onRestoreInstanceState (Parcelable state)

Hook allowing a Preference to re-apply a representation of its internal state that had previously been generated by onSaveInstanceState() . This function will never be called with a null state.

Parameters
state The saved state that had previously been returned by onSaveInstanceState() .

protected Parcelable onSaveInstanceState ()

Hook allowing a Preference to generate a representation of its internal state that can later be used to create a new instance with that same state. This state should only contain information that is not persistent or can be reconstructed later.

Returns
  • A Parcelable object containing the current dynamic state of this Preference, or null if there is nothing interesting to save. The default implementation returns null.

protected void onSetInitialValue (boolean restoreValue, Object defaultValue)

Implement this to set the initial value of the Preference.

If restorePersistedValue is true, you should restore the Preference value from the SharedPreferences . If restorePersistedValue is false, you should set the Preference value to defaultValue that is given (and possibly store to SharedPreferences if shouldPersist() is true).

This may not always be called. One example is if it should not persist but there is no default value given.

Источник

Оцените статью