2016-12-06 72 views
5

我不能爲我的生活理解爲什麼這個簡單的代碼來設置一個spannable字符串不工作在這個textview。如果日期是當天,則在顯示日期的文本之前,下面的方法會添加一個「Today」標記,該標記應該呈綠色。設置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); 
    } 
} 

但是,顏色不會改變。

enter image description here

下面是該視圖

<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

注:'機器人:textAllCaps = 「真」'將打破SpannableString –

回答

21

textAllCaps屬性被剝離任何Spannable信息對您String的XML。您需要刪除該文件(或將其設置爲false),然後在自己創建SpannableString之前自行處理轉換爲大寫。例如:

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

Spannable timeSpannable = new SpannableString(text.toUpperCase()); 

這是一個已知的錯誤與textAllCaps屬性,特別是與AllCapsTransformationMethod

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

+1

我用的是'機器人:textAllCaps = 「真」',去除它的工作後,太感謝你了! –

相關問題