与背景颜色按钮重大影响与背景颜色按钮重大影响(Material effect on button w

2019-05-10 09:45发布

我使用的是Android V21支持库。

我已创建了自定义背景色的按钮。 该材料的设计效果,如波纹,显示都消失了(除了点击高程)当我用回地面的颜色。

 <Button
 style="?android:attr/buttonStyleSmall"
 android:background="?attr/colorPrimary"
 android:textColor="@color/white"
 android:textAllCaps="true"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 />

下面是一个正常的按钮,影响工作就好了。

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:textAllCaps="true"
 android:text="Button1"
/>

Answer 1:

当您使用android:background ,要更换许多造型和外观和一个空白颜色的按钮的感觉。

更新:由于的版本23.0.0版本的程序兼容性 ,有一个新的Widget.AppCompat.Button.Colored风格,使用你的主题colorButtonNormal残疾人颜色和colorAccent已启用的颜色。

这可以让你直接通过应用到您的按钮

<Button
  ...
  style="@style/Widget.AppCompat.Button.Colored" />

如果你需要一个定制colorButtonNormalcolorAccent ,您可以使用ThemeOverlay在解释这个专业提示和android:theme上的按钮。

以前的答案

你可以在你的背景,如您的V21目录使用可拉伸性:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?attr/colorControlHighlight">
    <item android:drawable="?attr/colorPrimary"/>
</ripple>

这将确保你的背景颜色是?attr/colorPrimary并且有使用默认的缺省纹波动画?attr/colorControlHighlight (你也可以在你的主题设置,如果你想)。

注意:您要为小于V21创建一个自定义选择:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/primaryPressed" android:state_pressed="true"/>
    <item android:drawable="@color/primaryFocused" android:state_focused="true"/>
    <item android:drawable="@color/primary"/>
</selector>

假设你有一些颜色,你想为默认,压制,并集中状态。 就个人而言,我参加了一个波纹中途的截图通过被选中并拉主/聚焦状态了这一点。



Answer 2:

还有一种简单的解决方案,为“平”按钮,可以自定义背景,同时保持自己的“材料”的效果。

  1. 将您的按钮ViewGroup中设置有希望的背景
  2. 设置selectableItemBackground从当前主题作为背景,用于按钮(API> = 11)

即:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/blue">
    <Button
        style="?android:attr/buttonStyleSmall"
        android:background="?android:attr/selectableItemBackground"
        android:textColor="@android:color/white"
        android:textAllCaps="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Button1"
        />
</FrameLayout>

可用于平按钮,它适用于API> = 11,你会得到涟漪效应在> = 21级的设备,保持常规按钮上预21,直到程序兼容性更新,以支持纹波有作为。

您还可以使用selectableItemBackgroundBorderless只> = 21的按钮。



Answer 3:

这里是提供涟漪效应与自定义背景提出按钮的简单和向后兼容的方式。

您的布局应该是这样的

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_custom_background"
    android:foreground="?android:attr/selectableItemBackground"/>


Answer 4:

今天我就遇到了这个问题实际上与V22库中播放。

假设你正在使用的样式,你可以设置colorButtonNormal属性和按钮,将默认使用该颜色。

<style name="AppTheme" parent="BaseTheme">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primaryColor</item>
    <item name="colorPrimaryDark">@color/primaryColorDark</item>
    <item name="colorAccent">@color/accentColor</item>
    <item name="colorButtonNormal">@color/primaryColor</item>
</style>

以外的是,你还可以做一个风格的按钮,然后使用每个按钮,如果你需要的颜色的分类(没有测试过,只是猜测)。

记得添加android:在您的V21风格的项目名称之前。



Answer 5:

随着程序兼容性(22.1.1+),你可以添加一个样式像这样:

<style name="MyGreenButton">
    <item name="colorButtonNormal">#009900</item>
</style>

和刚刚应用样式使用:

<android.support.v7.widget.AppCompatButton
    style="@style/MyGreenButton"
    android:layout_width="match_width"
    android:layout_height="wrap_content"
    android:text="A Green Button"
    />

编程改变颜色,我发现,只有这样,才能更新颜色(API上15或16)是使用“背景色列表”来代替。 而且它不会删除的API 21设备上的漂亮径向动画:

ColorStateList colorStateList = new ColorStateList(new int[][] {{0}}, new int[] {0xFF009900}); // 0xAARRGGBB
button.setSupportBackgroundTintList(colorStateList);

由于button.setBackground(...)button.getBackground().mutate().setColorFilter(...)就像他们在21 API做不改变API 15和16的按钮颜色。



Answer 6:

该@ ianhanniballake的答案是绝对正确的,简单的。 但我花了几天的了解。 对于有人谁不明白他的答案,这里是更详细的实施

<Button
        android:id="@+id/btn"
        style="@style/MaterialButton"
        ... />


<style name="MaterialButton" parent="Widget.AppCompat.Button.Colored">
    <item name="android:theme">@style/Theme.MaterialButton</item>
   ...
</style>


<style name="Theme.MaterialButton" parent="YourTheme">
    <item name="colorAccent">@color/yourAccentColor</item>
    <item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>

===或者===

<Button
        android:id="@+id/btn"
        style="@style/Widget.AppCompat.Button.Colored"
        android:theme="@style/Theme.MaterialButton" />

<style name="Theme.MaterialButton" parent="YourTheme">
    <item name="colorAccent">@color/yourAccentColor</item>
    <item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>


Answer 7:

我用backgroundTint和前景:

<Button
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:backgroundTint="@color/colorAccent"
    android:foreground="?android:attr/selectableItemBackground"
    android:textColor="@android:color/white"
    android:textSize="10sp"/>


Answer 8:

我来到这个岗位寻找一种方式有我的背景颜色ListView项目,但保持纹波。

我只是将我的颜色作为背景和selectableItemBackground的前景:

<style name="my_list_item">
    <item name="android:background">@color/white</item>
    <item name="android:foreground">?attr/selectableItemBackground</item>
    <item name="android:layout_height">@dimen/my_list_item_height</item>
</style>

它就像一个魅力。 我想可以使用相同的技术为按钮以及。 祝好运 :)



Answer 9:

如果您有兴趣的ImageButton你可以试试这个简单的事情:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_button"
    android:background="?attr/selectableItemBackgroundBorderless"
/>


Answer 10:

使用backgroundTint而不是background



Answer 11:

v22.1appcompat-v7引入了一些新的可能性。 现在,可以到一个特定的主题,只分配到一个视图。

弃用使用应用程序:主题造型工具栏。 对所有API级别主题为工具栏7和更高版本的设备和android:您现在可以使用Android的主题支持的API级别11及更高版本的设备所有小工具。

因此,而不是在一个全球性的主题设定所需要的颜色,我们创建了一个新的一个,并将其分配仅对Button

例:

<style name="MyColorButton" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorButtonNormal">@color/myColor</item>
</style>

而使用这种风格为您的主题Button

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 android:theme="@style/MyColorButton"/>


Answer 12:

如果你确定使用第三方库,检查出traex / RippleEffect 。 它可以让你波纹效果添加到只需几行代码任何观点。 你只需要包装,在你的XML布局文件,你想有一个连锁反应元素com.andexert.library.RippleView容器。

作为额外的奖励它需要闵SDK 9所以你可以跨操作系统版本设计的一致性。

下面是从图书馆的GitHub库采取了一个例子:

<com.andexert.library.RippleView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:rv_centered="true">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@android:drawable/ic_menu_edit"
        android:background="@android:color/holo_blue_dark"/> 

</com.andexert.library.RippleView>

:您可以通过添加此属性的RippleView元素来改变纹波颜色app:rv_color="@color/my_fancy_ripple_color



Answer 13:

<android.support.v7.widget.AppCompatButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="#fff"
    android:textColor="#000"
    android:text="test"/>

使用

xmlns:app="http://schemas.android.com/apk/res-auto"

和颜色acept在预棒棒糖



Answer 14:

有两种方法在伟大的教程是亚历克斯·洛克伍德解释说: http://www.androiddesignpatterns.com/2016/08/coloring-buttons-with-themeoverlays-background-tints.html :

方法一:修改按钮的背景颜色W / A ThemeOverlay

<!-- res/values/themes.xml -->
<style name="RedButtonLightTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">@color/googred500</item>
</style>

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

方法2:设置AppCompatButton的背景色彩

<!-- res/color/btn_colored_background_tint.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Disabled state. -->
    <item android:state_enabled="false"
          android:color="?attr/colorButtonNormal"
          android:alpha="?android:attr/disabledAlpha"/>

    <!-- Enabled state. -->
    <item android:color="?attr/colorAccent"/>

</selector>

 <android.support.v7.widget.AppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundTint="@color/btn_colored_background_tint"/> 


Answer 15:

编程应用颜色:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {

    ColorStateList colorStateListRipple = new ColorStateList(
            new int[][] {{0}},
            new int[] {Color.WHITE} // ripple color
            );

    RippleDrawable rippleDrawable = (RippleDrawable) myButton.getBackground();
    rippleDrawable.setColor(colorStateListRipple);
    myButton.setBackground(rippleDrawable); // applying the ripple color
}

ColorStateList colorStateList = new ColorStateList(
        new int[][]{
                new int[]{android.R.attr.state_pressed}, // when pressed
                new int[]{android.R.attr.state_enabled}, // normal state color
                new int[]{} // normal state color
        },
        new int[]{
                Color.CYAN, // when pressed
                Color.RED, // normal state color
                Color.RED // normal state color
        }
);

ViewCompat.setBackgroundTintList(myButton, colorStateList); // applying the state colors


Answer 16:

我尝试这样做:

android:backgroundTint:"@color/mycolor"

不是改变背景属性。 这不会删除重大影响。



文章来源: Material effect on button with background color