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
生成相同的颜色,为其他用户生成不同的颜色。
我在使用 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
生成相同的颜色,为其他用户生成不同的颜色。