我正在尝试创建一个通用框架函数,使得任何Drawable在按下/聚焦/选择/等时都会突出显示.
我的函数接受一个Drawable并返回一个StateListDrawable,其中默认状态是Drawable本身,而状态for android.R.attr.state_pressed是相同的drawable,只需使用过滤器setColorFilter.
我的问题是我无法克隆drawable并使用过滤器创建一个单独的实例.这是我想要实现的目标:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
Run Code Online (Sandbox Code Playgroud)
如果我没有克隆,那么过滤器显然适用于这两种状态.我试过玩,mutate()但它没有帮助..
有任何想法吗?
更新:
接受的答案确实克隆了一个可绘制的.这对我没有帮助,因为我的一般功能在一个不同的问题上失败了.看起来当你向StateList添加一个drawable时,它会丢失所有的过滤器.
我已经读过几件关于它的事情,但我找不到我需要的东西.我想保留灰色箭头,但我想从默认样式中删除水平条并具有白色背景.你知道我怎么做吗?
这是我现在拥有的(默认微调器样式):

这就是我想要的:

正如我在我的问题中写的那样,我想改变Spinner XML格式的下拉箭头(默认箭头,不是自定义箭头或类似的东西)的颜色,但问题是我找不到任何东西要做从中引用它XML.
可能吗?如果是,我该如何改变颜色?
提前致谢.
我试图将微调器添加到我的操作栏中。我正在使用cusome微调器。这是代码。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/block" >
<Spinner
android:id="@+id/action_bar_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是我在SpinnerAdapter的getView方法中添加的代码,以获取SpinnerAdapter的自定义标题。它是一个文本视图。
android:id="@+id/spinner_title"
style="@style/text_title"
android:layout_alignParentRight="true"
android:ellipsize="end"
android:gravity="right"
android:singleLine="true"
android:text="@string/list_header"
android:enabled="false"
Run Code Online (Sandbox Code Playgroud)
一切正常。但是我在微调器的标题下方出现了下划线,并且我想更改微调器标题右侧的三角形的默认灰色。
请指教。