当前位置: 首页 > 知识库问答 >
问题:

Lollipop的背景色对按钮没有影响

令狐昂雄
2023-03-14

我在我的活动中有一个按钮,我希望它有我的主题的重音颜色。而不是像我们必须做前Lollipop一样制作我自己的绘图,自然我想使用新的背景色调属性。

<Button
    android:id="@+id/btnAddCode"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/accent"
    android:text="@string/addressInfo_edit_addCode" />

不幸的是,它没有效果,按钮保持灰色。

我尝试了backgroundTintMode的不同值,但没有改变任何东西。

我还尝试在我的活动中以编程方式进行,但没有改变任何东西。

addCodeView.findViewById(R.id.btnAddCode).setBackgroundTintList(
     getResources().getColorStateList(R.color.accent));

为什么我的色彩被忽略了?

编辑:只是澄清一下,我确实在测试Lollipop设备。其他小部件(如EditText)正确自动着色。

共有3个答案

琴正初
2023-03-14

解决Android 5.0上的着色相关问题。x我用的是这样的东西:

public static void setButtonTint(Button button, ColorStateList tint) {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
        ((AppCompatButton) button).setSupportBackgroundTintList(tint);
    } else {
        ViewCompat.setBackgroundTintList(button, tint);
    }
}

它仅对API 21使用支持方法,对所有其他情况使用ViewCompat支持方法。

伏砚
2023-03-14

看起来,给ripple可绘制对象着色是没有意义的(按钮的默认背景是ripple可绘制对象)。

事实上,在查看了平台的默认按钮drawable之后,我找到了实现这一点的“正确”方法:。您必须在主题中定义这一点:

    <item name="android:colorButtonNormal">@color/accent</item>

(当然这只适用于21级。)

警告:因为这是在主题中定义的,所以这将为所有按钮(至少是使用该主题的活动中的所有按钮)使用给定的颜色。)

另外,您还可以通过定义以下内容来更改涟漪颜色:

    <item name="android:colorControlHighlight">@color/accent_ripple</item>
笪欣嘉
2023-03-14

就像BoD说的,在Lollipop5.0(API级别21)中给按钮的背景着色是毫无意义的。

Lollipop5.1(API等级22)似乎通过改变btn_mtrl_default_形状解决了这个问题。xml(以及其他文件):https://android.googlesource.com/platform/frameworks/base//6dfa60f33ca6018959ebff1efde82db7d2aed1e3^/#F0

新的支持库(版本22.1)为许多组件添加了向后兼容的着色支持,包括AppCompatButton!

不幸的是,android:backgroundTint属性仍然不起作用(可能我做错了什么)——因此您必须使用setsupportbackgroundtinlist()在代码中设置ColorStateList。很高兴看到android:backgroundTint在未来得到支持。更新:Marcio Granzotto评论说,app:backgroundTint适用于AppButton!请注意,它是app:,而不是android:,因为它在app/库中。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <AppCompatButton
        android:id="@+id/mybutton"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Testing, testing"
        app:backgroundTint="#ff00ff"/>

</LinearLayout>

如果您让活动继承自AppCompatActivity,则它将自动膨胀AppCompatButton,而不是正常的按钮。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
        ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
        v.setSupportBackgroundTintList(csl);
    }
}

当然,您应该从颜色资源中获取ColorStateList,但我很懒,所以。。。

哦,别忘了把你的应用程序主题建立在一个主题上。AppCompat主题,否则compat视图将非常、非常悲伤……;)

这对2.3.7(姜饼MR1)和5.0(Lollipop“经典”)都有效。

 类似资料:
  • 我对改变晶圆厂的背景色有一个问题,似乎晶圆厂后面有另一个背景 这是我的代码 现在唯一有效的解决方案是改变我的应用程序上的颜色口音,但它会影响其他UI元素

  • 本文向大家介绍使用CSS更改按钮的背景色,包括了使用CSS更改按钮的背景色的使用技巧和注意事项,需要的朋友参考一下 要更改按钮的背景色,请使用background-color属性。 您可以尝试运行以下代码来更改按钮的背景色 示例

  • 我有一个Java应用程序,它使用本机LAF,如下所示: 这是伟大的工作,然而,我试图使一个按钮有一个红色的背景,但最终像这样: 正如你所看到的,我在按钮上设置了背景和前景,但结果并不令人满意。有没有一种方法可以让按钮在不子类化JButton的情况下绘制红色背景?

  • 我正在尝试将按钮的背景色从蓝色淡入白色,并将字体颜色从白色淡入蓝色。我查了其他帖子。 这是我的小提琴:http://jsfiddle.net/t533wbuy/1/ 我用这把小提琴作为参考:http://jsfiddle.net/visualdecree/SvjHx/ 我的问题是: 我希望它是一个按钮,而不是一个按钮 Css html 点击这里申请 jQuery

  • 我正在使用Android v21支持库。 我已经创建了一个自定义背景颜色的按钮。当我使用背景色时,像涟漪,揭示的材质设计效果已经消失了(除了点击时的提升)。

  • 我需要按钮的涟漪效应。目前,我正在使用ripple背景按钮在Lollipop和向上的设备使用一个xml在v21目录,它是工作良好的,但我也需要一个ripple效果在Lollipop之前的设备。 我使用了一些自定义库来获取Lollipop前设备的涟漪效应。例如,我使用库,方法如下:如何为pre-lollipop创建ripple效果。在那里,他们使用这个库,它使用一个自定义视图来包装按钮。 所以当我用