use*_*059 12 android colors uicolor
所以我一直在阅读如何创建自动生成的联系人背景颜色.显然它是基于联系人中键的hashCode().我已经看到它说电子邮件被用作密钥,但这没有任何意义,因为并非所有的联系人都有与之关联的电子邮件,而那些没有完全相同的颜色.
最终,我希望能够获得联系人卡片中使用的精确颜色.这样,我在我的应用程序中的图标具有与单击它时使用的相同的背景颜色,并使用ACTION_VIEW打开联系人卡片.
那么,只是想知道我需要使用什么作为关键来为每个联系人生成由android联系人应用程序生成的相同颜色?谢谢.
PS.这是我现在用于颜色味觉的十六进制代码.如果有人也可以说明这一点的准确性,我会非常感激.谢谢.
<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>
Run Code Online (Sandbox Code Playgroud)
编辑:有些人一直在说它类似于另一个答案,Android棒棒糖接触颜色
答案的问题是它不完整.它解释了如何以相同的方式生成颜色,但我不只是尝试进行随机颜色生成.我希望获得默认联系人应用程序用于该联系人的确切颜色.
从Google ContactsCommon源代码:
所述标识符是一个独特的和确定的字符串,它可以被用来识别该接触。通常,这是联系人的查找键,但是也可以使用其他联系人详细信息,尤其是对于可能没有查找键的非本地或临时联系人。这用于确定图块的颜色。从ContactPhotoManager中。
该标识符用于LetterTileDrawable类以选择图块颜色(标识符来自联系请求)。
/**
* 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);
}
Run Code Online (Sandbox Code Playgroud)
调色板在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>
Run Code Online (Sandbox Code Playgroud)
Sar*_*ern -1
希望这可以帮助你
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |