【发布时间】:2016-02-16 20:54:54
【问题描述】:
我的应用布局中有几个按钮,我想动态更改这些按钮的颜色。当我使用
b.setBackgroundColor(0xFF386F00);
颜色会按预期变化,但按钮的形状、大小和填充也会发生变化,就像在this 相关问题中一样。
我尝试使用该答案中建议的解决方案,但这样做
b.getBackground().setColorFilter(0xFFFF0000,PorterDuff.Mode.MULTIPLY);
对我的任何按钮都没有影响。我不知道这可能是什么原因。相关代码是这样的:
import android.widget.Button;
...
@Override
public View getView(int i, View convertView, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.hrlistitems, parent, false);
Button b = (Button) rowView.findViewById(R.id.HRlistB);
b.setOnClickListener(onBButtonClicked);
b.getBackground().setColorFilter(0xFFFF0000,PorterDuff.Mode.MULTIPLY);
rowView.setTag(values.get(i).getId());
TextView textView = (TextView) rowView.findViewById(R.id.HRlisttext);
textView.setText(values.get(i).toTitle());
return rowView;
}
这是自定义适配器的一部分,这可能会使事情复杂化,但我也尝试了我在“正常”按钮上尝试的所有方法,但没有得到积极的结果。适配器中的其他所有内容也完全符合我的预期。
这是对应xml文件的按钮部分
<Button
android:id="@+id/HRlistB"
android:layout_width="30dp"
android:layout_height="40dp"
android:layout_above="@+id/HRlist4"
android:layout_toLeftOf="@+id/HRlistB2"
android:layout_toStartOf="@+id/HRlistB3"/>
此按钮出于某种原因呈现为一个小正方形 (!),其周围有一些空间,并且边角是圆角的。我不知道为什么会这样,但我对它的外观非常满意。如果设置背景颜色,大小变为实际 30dpx40dp,没有任何填充,也没有圆角。我正在尝试找到一种方法来更改颜色并保持其余部分不变。
为什么 ColorFilter 不工作?
如何在不改变按钮的任何其他内容(如大小等)的情况下为按钮着色?
【问题讨论】:
-
你的按钮的背景是什么?
-
我不确定我是否理解您的意思...您要我发布 xml 文件吗?
-
the color changes as expected, but the shape, size and padding of the button changes too那么按钮的形状、大小和填充是什么? -
您的按钮没有背景,那么您想如何更改其颜色过滤器?