设置一个不能在简单的Textview上工作的spannable字符串

Ton*_*ian 8 android textview spannablestring

我不能为我的生活理解为什么这个设置spannable字符串的简单代码不能在这个textview上工作.如果日期是当前日期,则下面的方法会在显示日期的文本之前添加"今日"标记,该标记应为绿色.

private void setTimeTextView(String timeString) {

    Calendar c = Calendar.getInstance();

    String todaysDateString = ApiContentFormattingUtil.getFullDateFormat(c.getTime());
    if (timeString.equals(todaysDateString)){
        String todayText = getResources().getString(R.string.today_marker);

        Spannable timeSpannable = new SpannableString(todayText + timeString);
        timeSpannable.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.greenish_teal)), 0,
                todayText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mDateTime.setText(timeSpannable);
    } else {
        mDateTime.setText(timeString);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,颜色不会改变.

在此输入图像描述

以下是此视图的XML

<TextView
        android:id="@+id/newsfeed_date_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="23dp"
        android:textSize="12sp"
        android:textColor="@color/white_three"
        android:letterSpacing="0.06"
        app:fontPath="@string/opensans_bold_path"
        tools:text="Monday, January 1st"
        android:textAllCaps="true"
        tools:ignore="MissingPrefix"
        tools:targetApi="lollipop"/>
Run Code Online (Sandbox Code Playgroud)

Mik*_* M. 32

textAllCaps属性正在删除Spannable您的任何信息String.false在创建SpannableString它之前,您需要将其删除(或将其设置为)并自行处理转换为大写字母.例如:

String todayText = getResources().getString(R.string.today_marker);
String text = todayText + timeString;

Spannable timeSpannable = new SpannableString(text.toUpperCase());
Run Code Online (Sandbox Code Playgroud)

这是textAllCaps属性的已知错误,特别是AllCapsTransformationMethod.

http://code.google.com/p/android/issues/detail?id=67509

  • 我正在使用`android:textAllCaps ="true"`,删除后它工作了,非常感谢你! (3认同)