Android Button drawableEnd样式项

时间:2018-11-27 19:28:23

标签: android android-layout

我在styles.xml文件中定义了一个按钮样式。

"moduleResolution" : "node"

我正在视图中使用它

<style name="Button" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:drawablePadding">@dimen/padding_medium</item>
    <item name="android:paddingStart">@dimen/padding_medium</item>
    <item name="android:paddingEnd">@dimen/padding_medium</item>
    <item name="android:textAppearance">@style/ButtonTextAppearance</item>
</style>
<style name="Button.Secondary" parent="Button">
    <item name="android:background">@drawable/secondary_button_state</item>
    <item name="android:textColor">@color/blue</item>
</style>
<style name="Button.Secondary.Large" parent="Button.Secondary">
    <item name="android:drawableEnd">@drawable/ic_chevron</item>
    <item name="android:drawableTint">?colorPrimary</item>
    <item name="android:gravity">center|start</item>
</style>

我遇到的问题是<androidx.appcompat.widget.AppCompatButton android:id="@+id/action_date_range" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/Button.Secondary.Large" android:text="@{viewModel.overrideDateRange}" tools:text="@string/override_date_range" /> 。可以在api 23及以下版本,api 24及更高版本中渲染此可绘制项目。

编辑:

这是我的可绘制资源

<item name="android:drawableEnd">@drawable/ic_chevron</item>

1 个答案:

答案 0 :(得分:1)

这似乎是一个错误(我在运行Android 6的仿真器和设备中遇到了此错误):绘制了可绘制对象,但是样式属性<item name="android:drawableTint">?colorPrimary</item>没有任何作用,因此可绘制对象为白色。

您可以通过在可绘制矢量的路径中将android:fillColor="#FFFFFF"更改为android:fillColor="#000000"来进行测试。

因此,您必须以编程方式为较低的Api级别设置颜色:

对于Android 6,您可以引入定义ColorStateList的颜色资源文件 res / color / my_button_tint.xml 。由于只需要一种颜色,选择器结构中的一项就足够了。但您可以有更多颜色depending on the Button's state

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?android:attr/colorPrimary"/> 
</selector>

现在您可以写

if(Build.VERSION.SDK_INT == Build.VERSION_CODES.M){
    Context ctx = myButton.getContext(); // use any available Context here
    ColorStateList csl = ContextCompat.getColorStateList(ctx, R.color.my_button_tint);
    myButton.setCompoundDrawableTintList(csl);
}

对于较低的Api级别,您可以通过应用Drawable来更改ColorFilter的颜色,例如,请参见this post

或者您只需将可绘制矢量的路径中的android:fillColor="#ffffff"更改为所需的颜色即可。