2015-06-05 2 views
9

Я сделал несколько флажков и переключателей с текстовыми изображениями, но они не имеют тонированные пред-Lollipop.TextView tint на AppCompat

Моего TextViews продлить AppCompatCheckedTextView, оформлено как:

<style name="CheckBoxStyle" parent="android:Widget.TextView"> 
    <item name="android:textAppearance">?android:attr/textAppearance</item> 
    <item name="android:drawableRight">?android:attr/listChoiceIndicatorMultiple</item> 
    <item name="android:drawableEnd">?android:attr/listChoiceIndicatorMultiple</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">?attr/selectableItemBackground</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
</style> 

и я мой акцент определен в моей теме:

<style name="AppTheme.Platform.NoActionBar" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:selectableItemBackground">@drawable/press_overlay_dark</item> 
    <item name="android:borderlessButtonStyle">@style/BorderlessButton</item> 

    <item name="android:colorAccent">@color/color_accent</item> 
    <item name="colorAccent">@color/color_accent</item> 
</style> 

Я здание против v21, с минимумом v16 и используя AppCompat v7-22.1.1. Моя деятельность распространяется AppCompatActivity

Genymotion 4.1.1 Nexus 5 5.1.1

+0

Что ваш вопрос? –

+0

Как получить оттенок рабочей до леденец. AFAIK, он должен выглядеть как «EditText» и тому подобное. Добавлены скриншоты для уточнения. – DariusL

+0

проверить [этот ответ] (http://stackoverflow.com/a/35867517/2826147) для обновления. –

ответ

8

Глядя на источник для AppCompatCheckedTextView Я, наконец, понял это. Это только оттенки checkMark. Так как он происходит от CheckedTextView, который происходит от TextView, drawableRight только тонируется на леденец. Рассматривая источник для AppCompatTextView, он обеспечивает только обратную совместимость textAllCaps. Таким образом, AFAIK, нет встроенного способа оттенка drawableRight и тому подобного pre-lollipop. Если вам требуется более настраиваемое решение, вам может потребоваться разместить ваши чертежи в макете.

Обновленный стиль:

<style name="CheckBoxStyle" parent="android:Widget.TextView"> 
    <item name="android:textAppearance">@style/TextAppearance.AppCompat</item> 
    <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">?attr/selectableItemBackground</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
</style> 
1

виджет тонировка в AppCompat работает путем перехвата любой инфляции макета и вставив специальный оттенок-Aware версию виджета в place.if у вас есть свой собственный вариант из виджет, который в вашем случае является checkedtextview, то тонировка не будет работать

От разработчиков блог под виджет тонировки

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

При работе на устройствах с Android 5.0 все виджеты окрашены с использованием атрибутов цветовой темы, о которых мы только что говорили. Есть две основные функции, которые позволяют это на Lollipop: рисовать тонирование и ссылаться на атрибуты темы (формы? Attr/foo) в drawables.

AppCompat обеспечивает подобное поведение на более ранних версии Android для подмножества элементов интерфейса:

всех предусмотренных панелей AppCompat (в режимах действия и т.д.)

EditText

Spinner

CheckBox

RadioButton

Switch (используйте новый android.support.v7.widget.SwitchCompat)

CheckedTextView

Вам не нужно делать ничего особенного, чтобы сделать эти работы, просто использовать эти элементы в верстку, как обычно, и AppCompat сделает все остальное (с некоторыми оговорками; см. FAQ ниже).

+1

Ну, я использую AppCompatCheckedTextView, и он по-прежнему не оттеняет. Или это будет только оттенок, если я позволю активности раздуть представление? – DariusL

+0

Да просто добавьте appcompattextview в свой XML-макет вместо создания настраиваемого макета, расширяющего appcompattextview – 3xplore

+0

. Это не имеет никакого эффекта. – DariusL

0

У меня есть проблема оттенок. AppCompatTextView не имеет эффекта оттенка при работе на SDK ниже 21. Мое решение устанавливает цвет оттенка через java. Пример работы ниже.

XML

<android.support.v7.widget.AppCompatTextView 
    android:layout_width="50dp" 
    android:layout_height="20dp" 
    android:id="@+id/tvInfor2" 
    android:background="@drawable/btn_style_black_border" 
    android:gravity="center" 
    android:backgroundTint="@color/colorPrimary"/> 

ява

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion <= 21){ 
     tvInfor2.setSupportBackgroundTintList(getResources().getColorStateList(R.color.colorPrimary)); 
    } 
6

Если кто-то до сих пор ищет решения.

Для уровня Api 23> =android:drawableTint="@color/colorPrimary"

Для Api Уровень < Api 23:

private void setTextViewDrawableColor(TextView textView, int color) { 
     for (Drawable drawable : textView.getCompoundDrawables()) { 
      if (drawable != null) { 
       drawable.setColorFilter(new PorterDuffColorFilter(getColor(color), PorterDuff.Mode.SRC_IN)); 
      } 
     } 
    } 
3

Вот обратная совместимость TextView.

Использование:

<com.github.pedramrn.TextViewCompatTint 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableStart="@drawable/ic_comment_black_14dp" 
    app:drawableTint="@color/colorPrimary" 
    tools:text="28" 
    /> 

gist