TextDrawable - 根据键显示颜色(电子邮件,ID)

Ban*_*ana 3 java android android-adapter android-view android-drawable

我在使用TextDrawable遇到了一个问题- 我希望为同一个用户显示相同的颜色 - int color2 = generator.getColor("user@gmail.com");在我的情况下使用userId作为键,但我得到的是所有人userId的相同颜色.我在ListView和现在的RecyclerView中尝试了这个,但总是相同的结果 - 我的所有联系人共享相同的颜色.

这是我的ContactsAdapter的代码:

@Override
public void onBindViewHolder(ContactsAdapter.ContactsViewHolder holder, int position) {
    Contact contact = contactList.get(position);

    holder.userName.setText(contact.getUserName());

    TextDrawable.IBuilder builder = TextDrawable.builder()
            .beginConfig()
            .withBorder(0)
            .toUpperCase()
            .endConfig()
            .round();
    ColorGenerator generator = ColorGenerator.MATERIAL;
    // generate random color
    int color1 = generator.getRandomColor();                                    
    // generate color based on a key (same key returns the same color), useful for list/grid views
    int color2 = generator.getColor(holder.getItemId());
    //int color2 = generator.getColor("user@gmail.com");
    TextDrawable textDrawable = builder.build(contactList.get(position).getUserName().substring(0,1), color2);

    holder.thumbNail.setImageDrawable(textDrawable);
}
Run Code Online (Sandbox Code Playgroud)

如果我使用 int color2 = generator.getColor(holder.userName);我得到相同名称的不同颜色,如果我使用 int color2 = generator.getColor(holder.getItemId());我为每个userId获得相同的颜色.

azi*_*ian 5

如果我正确理解了这个问题,当您取消注释int color2 = generator.getColor("user@gmail.com");行时,您希望同一个用户具有相同的颜色,但其他用户具有其他颜色.

generator.getColor("some_example_string")将不断为列表中的每个用户返回相同的颜色.我看到你从github上复制了粘贴,你希望它适合你.请注意作者的上一行:

//根据键生成颜色

您必须提供密钥,并根据该密钥生成颜色.假设您的用户名可能被视为密钥,您可以执行以下操作:

generator.getColor(user.getName()); // e.g. "John Doe"
Run Code Online (Sandbox Code Playgroud)

现在每次都会John Doe为其他用户生成相同的颜色和不同的颜色.