gpt4 book ai didi

android - 以编程方式为具有 AppCompat 设计效果的 Android Button 设置 buttonColorNormal

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:10 25 4
gpt4 key购买 nike

我一直在使用适用于 Android 的 Google 设计支持库。为了设置不同于应用程序主题的按钮颜色,我在布局 XML 文件中声明按钮如下:

<Button
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/MyButton" />

然后在styles.xml中定义MyButton为

<style name="MyButton" parent="ThemeOverlay.AppCompat">
<item name="colorButtonNormal">@color/my_color</item>
</style>

这根据设计支持库为我提供了一个按钮,其背景颜色为我的 colors.xml 文件中用 @color/my_color 定义的颜色。

因此基本上是使用 android:theme 改变 colorButtonNormal 属性以获得所需的颜色。

如何以编程方式实现相同的结果?基本上如果我能做类似的事情

myButton.setTheme(R.style.MyButton) 

...然后我可以设置 colorButtonNormal 来获取 View 。

我不能像这样设置它

myButton.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.my_color));

或者甚至不喜欢

ColorStateList colorStateList = ContextCompat.getColorStateList(getActivity(), R.color.my_color);
ViewCompat.setBackgroundTintList(myButton, colorStateList);

这将删除触摸的设计支持库效果。

最佳答案

我为 Button 写了这个辅助方法:

public static ColorStateList getButtonColorStateList(Context context, int accentColor) {
// get darker variant of accentColor for button pressed state
float[] colorHSV = new float[3];
Color.colorToHSV(accentColor, colorHSV);
colorHSV[2] *= 0.9f;
int darkerAccent = Color.HSVToColor(colorHSV);

return new ColorStateList(
new int[][] {{android.R.attr.state_pressed}, {android.R.attr.state_enabled}, {-android.R.attr.state_enabled}},
new int[] { darkerAccent, accentColor, getColor(context, R.color.buttonColorDisabled) });
}

accentColor 是正常启用状态的颜色值。对于按下状态,使用较暗的 accentColor 变体,对于禁用状态,我在值中定义了颜色:

<color name="buttonColorDisabled">#dddddd</color>

使用这个方法:

mButton.setSupportBackgroundTintList(Utils.getButtonColorStateList(this, accentColor));

其中 mButton 是 AppCompatButton,accentColor 是颜色值。

这对我来说适用于 Lollipop 及更高版本,具有触摸效果,在 Lollipop 之前作为标准颜色变化。

关于android - 以编程方式为具有 AppCompat 设计效果的 Android Button 设置 buttonColorNormal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37589709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com