Android: создание пользовательских настроек

Можно ли создать индивидуальное предпочтение на PreferenceScreen ?

Я хотел бы ввести такие цветовые настройки:

Предпочтение цвета

Я знаю, что выбор цвета легко реализуется с помощью ListPreference , но это было бы потрясающе с такими «флажками».

    5 Solutions collect form web for “Android: создание пользовательских настроек”

    Страница разработчика Android показывает только, как сделать DialogFragment . Тем не менее, можно настроить внешний вид элемента Preference . В вашем XML вы должны объявить корневой элемент как android:id="@android:id/widget_frame , а затем объявить TextView как android:title и android:summary . Затем вы можете объявить другие элементы, которые хотите отобразить в макете. Вот пример, показывающий SeekBar который вы можете легко адаптировать к SeekBar цвета с несколькими флажками.

    seekbar_preference.xml

          

    Затем в classе, полученном из Preference , переопределите метод onCreateView() :

    SeekbarPreference.java

     @Override protected View onCreateView( ViewGroup parent ) { LayoutInflater li = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE ); return li.inflate( R.layout.seekbar_preference, parent, false); } 

    Затем в файле preferences.xml используйте предпочтение:

    preferences.xml

         

    Это дает предпочтение, что выглядит следующим образом:

    Элемент предпочтения поиска

    Вы можете легко адаптировать этот метод, чтобы показать несколько флажков в строке, как это было в исходном вопросе.

    Вот как я это делаю, используя поддержку библиотеки preference-v7 .

    • Расширьте Preference и переопределите onBindViewHolder() . Этот метод позволяет получить ссылки на представление вашего предпочтения через объект ViewHolder .
    • Надуйте свой пользовательский вид, используя setWidgetLayoutResourece() или setLayoutResource() в конструкторе.
    • Отключите поведение по умолчанию для всех представлений предпочтений и разрешите клики только пользовательские представления внутри.

    предпочтение

    макет / preference_theme.xml

     < ?xml version="1.0" encoding="utf-8"?>       

    PreferenceTheme.java (пользовательский class предпочтений)

     import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; public class PreferenceTheme extends Preference { public PreferenceTheme(Context context, AttributeSet attrs) { this(context, attrs, 0); } public PreferenceTheme(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setWidgetLayoutResource(R.layout.preference_theme); } @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); holder.itemView.setClickable(false); // disable parent click View button = holder.findViewById(R.id.theme_dark); button.setClickable(true); // enable custom view click button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // persist your value here } }); // the rest of the click binding } } 

    preferences.xml

     < ?xml version="1.0" encoding="utf-8"?>    ...   

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

    Разработчики Android имеют хорошее руководство по созданию настроек, в том числе раздел для создания пользовательских настроек: http://developer.android.com/guide/topics/ui/settings.html#Custom

    Вы можете создать свой собственный макет для предпочтения, и вы можете установить его в атрибуте android:layout в Preference в res / xml следующим образом:

      

    Или вы можете использовать действие вместо предпочтения

    Или лучшей альтернативой будет расширение classа DialogPreference. Вы можете установить виджет выбора цвета в виде диалогового windows и получить положительный результат внутри самого расширенного предпочтения. Вот аналогичный вопрос, но он очень полезен для вашего сценария.

    Interesting Posts

    Среднее нажатие на ноутбук Lenovo

    CSS-переполнение текста: эллипсис; не работает?

    Как отключить автоматическое обновление с Windows 8.0 до 8.1?

    iPhone: программно сжимать записанное видео для совместного использования?

    Функциональность или дополнение Firefox «забыть сайт»

    getView возвращает null, когда fragment был создан из действия

    Печать цветов фона в Chrome

    Могу ли я загружать Linux из VHD?

    Пользовательская маршрутизация ASP.NET MVC для поиска

    Windows 7 (домашняя премия): eventvwr.exe: как регистрировать блокировку и разблокировку рабочей станции, а также зацикленные вызовы и отклоненные события

    Миграция из Struts 1 в Struts 2

    перетащить файлы в стандартный файл html-файла

    Хранить данные в MKAnnotation?

    Я не могу получить второй маршрутизатор для расширения сети по сетевым адаптерам

    Как я могу восстановить свой ноутбук из неудавшегося обновления BIOS?

    Давайте будем гением компьютера.