Skip to content

ImageListPreference for android to create per item image list in preferences. Project created as Library. This library will not be updated anymore. Newer updated libarary can be found here: https://github.com/arnabJ/Android-ImageListPreference

Notifications You must be signed in to change notification settings

Proficient-Apps/Android-ImageListPreference

Repository files navigation

ImageListPreference

Based on ImageListPreference guide at :

'http://www.cmwmobile.com/index.php?option=com_content&view=article&id=4&Itemid=12' .

ImageListPreference class by Arnab Jain. Created for Proficient Apps.

Features

  • Image/Icon for each list item
  • Option to set Rounded Images [Circle shape]
  • Can be created in xml and as well as in Java
  • Bitmap or Drawable can be used for images when created using Java
  • Exception handling present along with log inputs for developers to fix issues while using the Preference in their application

Requirements

Tested with APIv21 & APIv23, but will work from APIv16 onwards

Installation

Paste or clone this library into the /libs folder, in the root directory of your project. Create a new folder: /libs if not already present.

Edit settings.gradle by adding the library. You have also define a project directory for the library.

Your settings.gradle should look like below:

include ':app', ':ImageListPreference'
project(':ImageListPreference').projectDir = new File('app/libs/ImageListPreference')

In your applicationModule(app)/build.gradle add the ImageListPreference library as a dependency:

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.android.support:appcompat-v7:23.1.1'
  compile project(":ImageListPreference")
}

Sync project, clean and build. You can use the ImageListPreference library as part of your project now.

Usage

xml

/res/xml/preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- You need to declare an application name space. -->

    <in.proficientapps.preference.imagelist.ImageListPreference
        android:key="pref_key_image_list_preference_1"
        android:title="@string/test_image_list_preference"
        android:dialogTitle="@string/test_image_list_preference"
        android:entries="@array/entries"
        android:entryValues="@array/entryValues"
        app:entryImages="@array/entryImages" <!-- This is an array containing references to the image drawables. -->
        app:roundedImage="false" /> <!-- 'COMPULSORY' | Set to false if you don't want rounded images else set to true. -->

    <in.proficientapps.preference.imagelist.ImageListPreference
        android:key="pref_key_image_list_preference_2"
        android:title="@string/test_image_list_preference_2"
        android:dialogTitle="@string/test_image_list_preference_2"
        android:entries="@array/entries"
        android:entryValues="@array/entryValues"
        app:entryImages="@array/entryImages"
        app:roundedImage="true" /> <!-- Images will be converted to Circular Shape. -->

</PreferenceScreen>

/res/values/arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="entries">
        <item>Item 1</item>
        <item>Item 2</item>
        <item>Item 3</item>
        <item>Item 4</item>
        <item>Item 5</item>
    </string-array>

    <string-array name="entryValues">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
    </string-array>

    <array name="entryImages">
        <item>@drawable/image_item_1</item>
        <item>@drawable/image_item_2</item>
        <item>@drawable/image_item_3</item>
        <item>@drawable/image_item_4</item>
        <item>@drawable/image_item_5</item>
    </array>
</resources>

Java

Inside onCreate(...) { ... } of your PreferenceActivity/PreferenceFragment

Get the base PreferenceScreen to which you want to add the Dynamically created ImageListPreferences:

PreferenceScreen prefScreen = this.getPreferenceScreen();
/*
 * Alternatively you can do,
 * PreferenceScreen prefScreen = (PreferenceScreen) findPreference("pref_screen_key");
 */

Declare 2 String arrays and 1 Drawable/Bitmap array for entries, entryValues and entryImages respectively:

Resources res = getResources();
String[] entries = new String[] {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
String[] entryValues = new String[] {"0", "1", "2", "3", "4"};
Drawable[] entryImages = new Drawable[] {res.getDrawable(R.drawable.image_item_1),
              res.getDrawable(R.drawable.image_item_2), res.getDrawable(R.drawable.image_item_3),
              res.getDrawable(R.drawable.image_item_4), res.getDrawable(R.drawable.image_item_5)};

Than create ImageListPreference object and add title, key and other requrired details:

ImageListPreference imgListPref1 = new ImageListPreference(getActivity());
imgListPref1.setKey("pref_key_dynamic_image_list_pref_1");
imgListPref1.setTitle("Dynamic Image List Preference 1");
imgListPref1.setDialogTitle("Dynamic Image List Preference 1");
imgListPref1.setEntries(entries);
imgListPref1.setEntryValues(entryValues);
/*
 * Pass the Drawable/Bitmap Array to setEntryImages() Method,
 * the second parameter requires boolean value true or false for setting roundedImage.
 * false = images will be added as is.
 * true = images will be added in circular shape.
 */
imgListPref1.setEntryImages(entryImages, false);
prefScreen.addPreference(imgListPref1);

Screens

Credits

  • CMWmobile.com[http://www.cmwmobile.com/] for guide on how to start with ImageListPreference
  • attenzione [Github user] for his ColorPickerPreference README.rst. Used it as base for this README.rst

About

ImageListPreference for android to create per item image list in preferences. Project created as Library. This library will not be updated anymore. Newer updated libarary can be found here: https://github.com/arnabJ/Android-ImageListPreference

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages