Intereting Posts
Добавить зависимость от конкретного продуктаFlavor и buildType в градиенте HorizontalScrollView со стрелками Замена для Android Mapview для использования службы WMS Значок расширенного доступа из Facebook не работает должным образом Android bitmap.h не найден для компиляции собственного кода Ошибка «EGL_BAD_MATCH» в эмуляторе Android Studio Платформа Android с использованием layout_weight, layout_width и maxWidth Как выполнить запросы RESTful POST с Android Невозможно создать AVD – нет изображения системы CPU / ABI Android-навигатор Как синхронизировать базу данных SQLite на телефоне Android с базой данных MySQL на сервере? Удаление тени с панели инструментов при открытии ящика навигации – поддержка библиотеки поддержки материалов Расширение API Android Google Maps v2 для обеспечения событий панорамирования и масштабирования Класс библиотеки предупреждений proguard android.webkit.WebView зависит от класса программы android.webkit.WebViewClien Перенос SVN в Android Studio

Использование значков в настройках Android

Я хотел бы, чтобы некоторые из моих предпочтений имели значки, такие как приложение «Настройки».

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

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

Кто-нибудь решил это уже с помощью простого или ресурсосберегающего подхода?

Приложение «Настройки» использует частный пользовательский подкласс PreferenceScreen чтобы иметь значок – IconPreferenceScreen . Это 51 строка кода, включая комментарии, хотя для этого также требуются некоторые пользовательские атрибуты. Самый простой вариант – клонировать все это в ваш проект, даже если вам это не нравится.

исходный код

Начиная с уровня API 11 вы можете добавить значок в настройки:

http://developer.android.com/reference/android/preference/Preference.html#setIcon%28int%29

http://developer.android.com/reference/android/preference/Preference.html#attr_android:icon

Для более старых версий Android вы должны использовать пользовательские макеты и связывать изображения в коде, как предлагает @ roger-l.

Обновлено …. ответил и работал

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

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+android:id/widget_frame" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical" android:paddingRight="?android:attr/scrollbarSize"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="6dip" android:layout_marginRight="6dip" android:layout_gravity="center" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dip" android:layout_marginRight="6dip" android:layout_marginTop="6dip" android:layout_marginBottom="6dip" android:layout_weight="1"> <TextView android:id="@+android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" android:ellipsize="marquee" android:fadingEdge="horizontal" /> <TextView android:id="@+android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignLeft="@android:id/title" android:textAppearance="?android:attr/textAppearanceSmall" android:maxLines="2" /> </RelativeLayout> </LinearLayout> 

И импортированный класс для IconPreferenceScreen

 public class IconPreferenceScreen extends Preference { private final Drawable mIcon; private static String mType; public IconPreferenceScreen(Context context, AttributeSet attrs, int iconRes) { this(context, attrs, 0, iconRes); } public IconPreferenceScreen(Context context, AttributeSet attrs, int defStyle, int iconRes) { super(context, attrs, defStyle); setLayoutResource(R.layout.preference_icon); mIcon = context.getResources().getDrawable(iconRes); } public IconPreferenceScreen(Context context, int iconRes) { this(context, null, iconRes); } @Override public void onBindView(View view) { super.onBindView(view); ImageView imageView = (ImageView) view.findViewById(R.id.icon); if (imageView != null && mIcon != null) { imageView.setImageDrawable(mIcon); } } } 

То вы можете просто использовать новый IconPreferenceScreen вместо Предпочтения и добавить значок

Android 3.x Honeycomb показывает значки, определенные в стандартных настройках.

Вероятно, использование значка зависит от версии ОС Android или размера экрана.