TextDrawable - 根据键(电子邮件、id)显示颜色

TextDrawable - Display color based on a key (email, id)

我在使用 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);
}

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

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

generator.getColor("some_example_string") 将始终 return 为您列表中的每个用户使用相同的颜色。我看到您已经从 github 复制粘贴了它,并且您希望它对您有用。注意笔者的上一行:

// generate color based on a key

您必须提供一个键,然后将根据该键生成一种颜色。假设您的用户名可能被视为密钥,您可以执行:

generator.getColor(user.getName()); // e.g. "John Doe"

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