如何在android.support.design.chip.Chip中设置文本颜色?

7
<android.support.design.chip.Chip
     style="@style/Widget.MaterialComponents.Chip.Choice"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_margin="4dp"
     android:checked="true"
     android:padding="4dp"
     android:textAppearance="?android:textAppearanceSmall"
     app:chipBackgroundColor="@color/selector"
     app:chipText="Test"
     app:chipIconEnabled="true"
     app:chipIconSize="20dp" />

在XML中,没有像这样的属性:

chipTextColor

编程生成的 SpannableString 无法正常工作:

SpannableStringBuilder builder = new SpannableStringBuilder();
String numeric = getString(R.string.patient_list_order_date);
SpannableString whiteSpannable= new SpannableString(numeric);
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, numeric.length(), 0);
builder.append(whiteSpannable);
chip.setChipText(builder);

解决了吗? - IntelliJ Amiya
很遗憾,采用的解决方案只是一个权宜之计。在supportLibraryVersion 28.0.0-alpha3中,属性app:chipText不再可用,而是使用经典的android:text。现在,使用特定的foregroundColorSpanSpannableString类可以起作用。 - Lorenzo Marchesi
好的。明白了。 - IntelliJ Amiya
4个回答

19

我设法像这样在28.0.0-alpha3中设置文本颜色:

chip.setChipText(text);
chip.setTextAppearanceResource(R.style.ChipTextStyle_Selected);

并使用这些参数创建一个样式:

<style name="ChipTextStyle_Selected">
    <item name="android:textSize">13sp</item>
    <item name="android:textColor">@color/white</item>
</style>

尝试了一段时间后,对我有用。这应该是被接受的答案。谢谢! - Tgo1014
经过一天的调试,问题得以解决,它可以在HTC设备5.1.1上工作。非常感谢。 - user3069590

4
你可以在xml中简单地使用android:textColor,例如:
    <com.google.android.material.chip.Chip
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"/>

或者您可以通过程序使用以下命令:

val chip = view.findViewById<Chip>(R.id.chip)
chip.setTextColor(Color.WHITE)

1

在支持库版本28中,您可以使用以下代码为芯片中的文本设置颜色

android:textColor="#FFFFFF"

并且这段代码用于在芯片中编写文本

android:text="example"

0

public class Chip extends AppCompatCheckBox implements ChipDrawable.Delegate

芯片是紧凑的元素,代表属性、文本、实体或操作。目前没有app:chipTextColor属性。

FYI

Material Design颜色系统可用于创建反映您品牌或风格的颜色主题。

阅读有关颜色系统的官方指南。

NOTE

您可以尝试使用ForegroundColorSpan

DEMO

    SpannableString whiteSpannable= new SpannableString(numeric);
    int color = getResources().getColor(R.color.your_color_name);
    ForegroundColorSpan fcs  =new ForegroundColorSpan(color);
    whiteSpannable.setSpan(new 
    ForegroundColorSpan(Color.WHITE),0,numeric.length(), 0);
    builder.append(whiteSpannable);
    chip.setChipText(builder);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接