我需要将笔触颜色更改为用户定义的颜色。 与国家无关

我需要改变应用程序的笔触颜色。 用户能够改变背景颜色,所以我也需要让他们改变button的笔触(轮廓)。 由于它已经在可绘制(下面的示例)中设置,我还没有find一种方法来改变这一点。 看起来像所有其他问题,只是说使用XML文件….但不让我做它的dynamic。 感谢您的任何帮助!

我需要将笔触颜色更改为用户定义的颜色。 与国家无关。

<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="@color/Dim_Gray" /> <<<<--- This is what I need to change <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <corners android:bottomRightRadius="12dp" android:bottomLeftRadius="12dp" android:topLeftRadius="12dp" android:topRightRadius="12dp"/> </shape> 

Solutions Collecting From Web of "我需要将笔触颜色更改为用户定义的颜色。 与国家无关"

1.如果你有像这样的“视图”的可绘制文件

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp" /> <solid android:color="@android:color/white" /> <stroke android:width="3px" android:color="@color/blue" /> </shape> 

然后你可以改变
一个。 描边颜色:

 GradientDrawable drawable = (GradientDrawable)view.getBackground(); drawable.setStroke(3, Color.RED); // set stroke width and stroke color 

纯色:

 GradientDrawable drawable = (GradientDrawable)view.getBackground(); drawable.setColor(Color.RED); // set solid color 

2.如果你有像这样的“视图”的可绘制文件

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:id="@+id/buttonSelected"> <shape> <solid android:color="@color/blue" /> <stroke android:width="1px" android:color="@color/blue" /> </shape> </item> <item android:state_checked="false" android:id="@+id/buttonNotSelected"> <shape android:shape="rectangle"> <solid android:color="@color/white" /> <stroke android:width="1px" android:color="@color/blue" /> </shape> </item> </selector> 

然后你可以改变单独的项目属性,通过在那里的位置分别绘制对象

 StateListDrawable drawable = (StateListDrawable)view.getBackground(); DrawableContainerState dcs = (DrawableContainerState)drawable.getConstantState(); Drawable[] drawableItems = dcs.getChildren(); GradientDrawable gradientDrawableChecked = (GradientDrawable)drawableItems[0]; // item 1 GradientDrawable gradientDrawableUnChecked = (GradientDrawable)drawableItems[1]; // item 2 

现在改变中风或纯色:

 //solid color gradientDrawableChecked.setColor(Color.BLUE); gradientDrawableUnChecked.setColor(Color.RED); //stroke gradientDrawableChecked.setStroke(1, Color.RED); gradientDrawableUnChecked.setStroke(1, Color.BLUE); 

也许他们指的是颜色状态列表 ,它允许你根据button被按下/聚焦/启用/等等来改变颜色

尝试使用StateLists(而不是ColorStateList)。 看看: http : //developer.android.com/guide/topics/resources/drawable-resource.html#StateList

你也可以在程序中创build一个ShapeDrawable (或者你的例子中的一个RoundRectShape ),然后调用button的setBackgroundDrawable

我在运行时更改了“形状边框颜色”中的类似问题

它就像f20k提出的相同的解决scheme,但在我的情况下,drawable是一个GradientDrawable,而不是一个ShapeDrawable。

看看它是否工作…