Android: ¿Cuál es la clave para obtener el color de fondo de contacto?

Así que he estado leyendo sobre cómo se crea el color de fondo generado automáticamente para los contactos. Aparentemente se basa en un hashCode () de una clave en el contacto. He visto que el correo electrónico se utiliza como la clave, pero eso no tiene sentido, ya que no todos los contactos tienen correos electrónicos asociados con ellos, y los que no son todos del mismo color.

En última instancia, quiero poder conseguir el color EXACTO usado en la tarjeta del contacto. De esta forma, el icono que tengo en mi aplicación tiene el mismo color de fondo que se utilizará al hacer clic en él y abrir la tarjeta de contacto con ACTION_VIEW.

Por lo tanto, sólo me preguntaba lo que necesito para usar como una clave para generar el mismo color que se genera por la aplicación de contactos de Android, para cada contacto individual? Gracias.

PD. He aquí los códigos hexadecimales que tengo ahora para el paladar de color. Si alguien podría chime en la exactitud de esto también, realmente lo apreciaría. Gracias.

<array name="letter_tile_colors"> <item>#f16364</item> <item>#f58559</item> <item>#f9a43e</item> <item>#e4c62e</item> <item>#67bf74</item> <item>#59a2be</item> <item>#2093cd</item> <item>#ad62a7</item> </array> 

Edit: Algunas personas han estado diciendo que es similar a otra respuesta, Android Lollipop color de contacto

El problema con esa respuesta es que es incompleta. Explica cómo generar colores de la misma manera, pero no estoy tratando de hacer la generación aleatoria de color. Estoy buscando obtener el color EXACTO que utiliza la aplicación de contactos predeterminada para ese contacto.

Desde el código fuente de Google ContactsCommon :

El identificador es una cadena única y determinista que se puede utilizar para identificar este contacto. Esto suele ser la clave de búsqueda del contacto, pero también se pueden utilizar otros detalles de contacto, especialmente para contactos no locales o temporales que podrían no tener una clave de búsqueda. Esto se utiliza para determinar el color de la baldosa. Desde ContactPhotoManager .

El identificador se utiliza LetterTileDrawable clase para seleccionar el color de la baldosa (el identificador proviene de la solicitud de contacto).

 /** * Returns a deterministic color based on the provided contact identifier string. */ private int pickColor(final String identifier) { if (TextUtils.isEmpty(identifier) || mContactType == TYPE_VOICEMAIL) { return sDefaultColor; } // String.hashCode() implementation is not supposed to change across java versions, so // this should guarantee the same email address always maps to the same color. // The email should already have been normalized by the ContactRequest. final int color = Math.abs(identifier.hashCode()) % sColors.length(); return sColors.getColor(color, sDefaultColor); } 

Las paletas se definen en el archivo colors.xml :

 <!-- Background colors for LetterTileDrawables. This set of colors is a subset of https://spec.googleplex.com/quantumpalette#extended which passes Google Accessibility Requirements for the color in question on white with >= 3.0 contrast. We used http://leaverou.github.io/contrast-ratio/#white-on-%23db4437 to double-check the contrast. These colors are also used by MaterialColorMapUtils to generate primary activity colors. --> <array name="letter_tile_colors"> <item>#DB4437</item> <item>#E91E63</item> <item>#9C27B0</item> <item>#673AB7</item> <item>#3F51B5</item> <item>#4285F4</item> <item>#039BE5</item> <item>#0097A7</item> <item>#009688</item> <item>#0F9D58</item> <item>#689F38</item> <item>#EF6C00</item> <item>#FF5722</item> <item>#757575</item> </array> <!-- Darker versions of letter_tile_colors, two shades darker. These colors are used for settings secondary activity colors. --> <array name="letter_tile_colors_dark"> <item>#C53929</item> <item>#C2185B</item> <item>#7B1FA2</item> <item>#512DA8</item> <item>#303F9F</item> <item>#3367D6</item> <item>#0277BD</item> <item>#006064</item> <item>#00796B</item> <item>#0B8043</item> <item>#33691E</item> <item>#E65100</item> <item>#E64A19</item> <item>#424242</item> </array> <!-- The default color used for tinting photos when no color can be extracted via Palette, this is Blue Grey 500 --> <color name="quickcontact_default_photo_tint_color">#607D8B</color> <!-- The default secondary color when no color can be extracted via Palette, this is Blue Grey 700 --> <color name="quickcontact_default_photo_tint_color_dark">#455A64</color> <color name="letter_tile_default_color">#cccccc</color> <color name="letter_tile_font_color">#ffffff</color> 

Espero que esto pueda ayudarte

  private static final int NUM_OF_TILE_COLORS = 8; private final TypedArray mColors; //initialize inside oncreate of your activity mColors = res.obtainTypedArray(R.array.letter_tile_colors);//array of colors you have //call in wherver you want, key is the name of the contact private int pickColor(String key) { // String.hashCode() is not supposed to change across java versions, so // this should guarantee the same key always maps to the same color final int color = Math.abs(key.hashCode()) % NUM_OF_TILE_COLORS; try { return mColors.getColor(color, Color.BLACK); } finally { mColors.recycle(); } } 
  • Obtener color-int del recurso de color
  • Elemento de vista de lista de Android que no muestra el color seleccionado
  • TextView y color de fondo
  • Cambiar el color del botón en el cursor
  • Mediacodec y cámara, espacio de color incorrecto
  • ¿Cómo aplicar * .cube Lut en bitmaps android?
  • Color Estado Lista no reconocida en forma Drawable
  • Invertir colores de mapa de bits
  • Cambiar el color del puntero del cursor EditText de Android mediante programación
  • Cómo cambiar el cuadro de diálogo de alerta divider color android
  • Android: definiendo colores haciendo referencia a otros colores definidos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.