我不能为我的生活理解为什么这个简单的代码设置一个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);
}
}
然而,颜色不会改变。
以下是此视图的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"/>
答案 0 :(得分:29)
textAllCaps
属性正在剥离Spannable
上的所有String
个信息。您需要将其删除(或将其设置为false
),并在创建SpannableString
之前自行处理转换为大写字母。例如:
String todayText = getResources().getString(R.string.today_marker);
String text = todayText + timeString;
Spannable timeSpannable = new SpannableString(text.toUpperCase());
这是textAllCaps
属性的已知错误,特别是AllCapsTransformationMethod
。