Как пометить значок справа от элемента предпочтения в PreferenceActivity?

#android #preferenceactivity #preference

#Android #preferenceactivity #предпочтение

Вопрос:

Пожалуйста, нажмите, чтобы увидеть изображение http://i1094.photobucket.com/albums/i455/tdounnyy/device.png

В нижней части этого PreferenceActivity «Выбрать мелодию звонка» имеет значок / кнопку с правой стороны.

А «Вибрировать» — нет.

Это предпочтение вибрации является одним из пользовательских предпочтений, расширяющих предпочтения.

Я хочу поместить тот же значок в строку вибрации. Один из способов — расширить ListPreference или RingtonePreference для cheat OS.

Мне это не нравится, интересно, есть ли лучшее решение.

preferences.xml

 <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2006 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
          http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<!-- Layout used by PreferenceScreen. This is inflated inside 
        android.R.layout.preference. -->
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="4dip"
    android:layout_gravity="center_vertical"
    android:background="@drawable/btn_circle"
    android:src="@drawable/ic_btn_round_more" />
  

Я добавил префикс «android» как:

 android:background="@android:drawable/btn_circle"
android:src="@android:drawable/ic_btn_round_more"
  

Теперь Eclipse сообщает: Ошибка: Ресурс не является общедоступным.
Я погуглил, но безуспешно.
Есть мысли, как пробиться?

Ответ №1:

Когда вы создаете XML-файл предпочтения, вы можете указать пользовательский макет для предпочтения и поместить в него значок. Самый простой способ сделать это — заглянуть в папку Android SDK: platforms/data // res /layout / (Я полагаю, что это она) содержит фактические файлы макета, используемые для разных типов предпочтений: вы, вероятно, можете скопировать один из них оттуда и использовать его в качестве основы для ваших собственных пользовательских предпочтений.

Комментарии:

1. Спасибо, это действительно элегантное решение. Но тогда я сталкиваюсь с другой проблемой, см. Выше. Ответ с благодарностью ~~

2. вам не обязательно ссылаться на ресурс Android (который не является общедоступным), но вы должны буквально скопировать файл ресурсов и добавить его в свой набор чертежных материалов проекта.

3. @Marcovena прав: вы должны скопировать его в свою собственную папку res / layout, чтобы использовать его, и тогда это просто обычный ресурс приложения, а не больше Android.

4. Я бы хотел сохранить тот же стиль во всей системе. Пока пользователь меняет тему, мое приложение будет выглядеть так же, как и другие.

5. Это хороший момент: я думаю, что если ваш стиль ссылается на цвета темы Android, он будет адаптироваться к изменениям в системной теме. Однако я никогда не пробовал это, поэтому, честно говоря, не могу так или иначе подтвердить, как это работает.

Ответ №2:

внутри вашего preference.xml

 android:widgetLayout="@layout/layout_contain_imageview"
  

или в .java

  setWidgetLayoutResource(R.layout.layout_contain_imageview);
  

пример для layout_contain_imageview.xml

 <?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@ id/ivIcon"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:src="@drawable/round_app_settings_alt_white_36"
    app:tint="@color/icon_tint"/>
  

когда вы хотите изменить значок во время выполнения

 @Override
    public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);
        ImageView ivIcon = (ImageView) holder.findViewById(R.id.ivIcon);
        ivIcon.setImageResource(R.drawable.round_get_app_white_36);
    }