我在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>
答案 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"
更改为所需的颜色即可。