2016-12-06 42 views
5

Nie mogę na życie zrozumieć, dlaczego ten prosty kod, aby ustawić ciąg spannable nie działa na ten widok tekstowy. Poniższa metoda dodaje znacznik "Dzisiaj", który powinien znajdować się na zielono przed tekstem wyświetlającym datę, jeśli data jest bieżącym dniem.Ustawianie ciąg spannable nie działa na prosty widok tekstowy

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); 
    } 
} 

Jednak kolor się nie zmieni.

enter image description here

Oto XML dla tego widoku

<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

UWAGA: 'android: textAllCaps = "true"' złamie SpannableString –

Odpowiedz

21

Atrybut textAllCaps jest usuwanie jakichkolwiek Spannable informacji na String. Musisz go usunąć (lub ustawić na false) i samodzielnie przeprowadzić konwersję na duże litery, zanim utworzysz swoją SpannableString. Na przykład:

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

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

Jest to znany bug z atrybutem textAllCaps, a konkretnie z AllCapsTransformationMethod.

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

+1

używałem 'android: textAllCaps = "true"', po usunięciu, że to zadziałało, dziękuję bardzo! –