Color Picker

Según la [documentación] de Google sobre Material Design(https://www.google.com/design/spec/components/pickers.html)

Los Pickers proveen una manera sencilla de seleccionar un valor en un conjunto predeterminado de datos.

¿Cómo se añade?

I. Clona el proyecto color picker de los repositorios Open Source de Google.

git clone https://android.googlesource.com/platform/frameworks/opt/colorpicker  

II. Importa un nuevo módulo en Android Studio con la opción del menú New/import module, eligiendo la ruta donde el proyecto fué clonado.

III. Compila el nuevo módulo como dependencia en tu módulo de aplicación app.

dependencies {  
    compile project(':colorpicker')
}

IV. Declara algunos colores en tun archivo de recursos colors.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <color name="red">#F6402C</color>
    <color name="pink">#EB1460</color>
    <color name="purple">#9C1AB1</color>
    <color name="deep_purple">#6633B9</color>
    <color name="indigo">#3D4DB7</color>
    <color name="blue">#1093F5</color>
    <color name="light_blue">#00A6F6</color>
    <color name="cyan">#00BBD5</color>
    <color name="teal">#009687</color>
    <color name="green">#46AF4A</color>
    <color name="light_green">#88C440</color>
    <color name="lime">#CCDD1E</color>
    <color name="yellow">#FFEC16</color>
    <color name="amber">#FFC100</color>
    <color name="orange">#FF9800</color>
    <color name="deep_orange">#FF5505</color>
    <color name="brown">#7A5547</color>
    <color name="grey">#9D9D9D</color>
    <color name="blue_grey">#5E7C8B</color>
</resources>  

V. Inicia el ColorPickerDialog con un título, un array de colores, el color seleccionado por defecto, el número de columnas y el total de colores mostrados en el diálogo.

ColorPickerDialog colorPickerDialog = new ColorPickerDialog();  
colorPickerDialog.initialize(  
    R.string.title, colors, selectedColor, numColumns, colors.length);

VI.Como ColorPickerDialog extiende de DialogFragment muéstralo con el método show que toma como parámetros un FragmentManager y un tag.

colorPickerDialog.show(getFragmentManager(), tag);  

¿Cómo modificar el estilo?

I. Declara un ColorPickerPalette en un archivo de layout.

<com.android.colorpicker.ColorPickerPalette  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/palette"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:padding="16dp"
    />

Note: El ColorPickerPalette extiende del viewgroup. GridlLayout, por lo que puedes usar los parámetros de estilo de este para estilizar el ColorPickerPalette.

II. Declara un estilo oscuro el cuál utilizará el diálogo que contendrá el ColorPickerPalette.

<style name="MyDialogTheme" parent="Theme.AppCompat.Dialog.Alert">  
    <item name="colorAccent">@color/teal_light</item>
    <item name="android:textColorPrimary">@android:color/white</item>
</style>  

III. Infla tu ColorPickerPalette en un objeto view.

LayoutInflater layoutInflater = LayoutInflater.from(context);  
ColorPickerPalette colorPickerPalette = (ColorPickerPalette) layoutInflater  
    .inflate(R.layout.custom_picker, null);

IV. Configura el ColorPickerPalette con el número total de colores y un listener.

colorPickerPalette.init(colors.length, columns, mOnColorSelectedListener);  

V. LLama al método colorPickerPalettede ColorPickerPalette con el array de colores que serán mostrados y el color por defecto.

colorPickerPalette.drawPalette(colors, selectedColor);  

VI. Crea tu diálogo con un AlertDialog.Builder con tu estilo oscuro como parámetro.

AlertDialog alert = new AlertDialog.Builder(this, R.style.MyDialogTheme)  
    .setTitle(R.string.title_color_picker)
    .setPositiveButton(android.R.string.ok, mOnClickListener)
    .setNegativeButton(android.R.string.no, mOnClickListener)
    .setView(colorPickerPalette)
    .create();

VII. Muestra tu diálogo

alert.show();