如何通过xml为android中的按钮添加渐变?

Posted

技术标签:

【中文标题】如何通过xml为android中的按钮添加渐变?【英文标题】:How to add a gradient to buttons in android through xml? 【发布时间】:2012-08-23 09:24:19 【问题描述】:

我不知道为什么这段代码不起作用。任何人都可以帮忙吗?我试图让按钮使用名为“greenstart”和“greenend”的自定义颜色。颜色已在 res/value/string.xml 文件中创建。我看过类似的问题,但要么没有答案,要么不清楚,要么解决方案不起作用。提前致谢。

XML 文件样本:

<Button
   android:id="@+id/mycollection"
   android:layout_
   android:layout_
   android:layout_weight="1" >

   <Gradient
      android:angle="270"
      android:endColor="@color/greenstart"
      android:startColor="@color/greenend" >
   </Gradient>
</Button>

【问题讨论】:

【参考方案1】:

创建一个新的xml文件并将其放入drawable中,然后将其作为背景添加到按钮中

gradient.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
    <!--  Gradient Bg for listrow -->
   <gradient
      android:startColor="#f1f1f2"
      android:centerColor="#e7e7e8"
      android:endColor="#cfcfcf"
      android:angle="270" />
</shape>

layout.xml

 <Button
    android:id="@+id/Button01"
    android:layout_
    android:layout_
    android:layout_weight="1"
    android:background="@drawable/gradient"
    android:text="Übernehmen" >

【讨论】:

如何将其称为按钮背景? "android:background="@?" 请注意,&lt;shape&gt; 不是必需的。我在创建 &lt;gradient&gt; 时得到了相同的结果,但它周围没有任何 &lt;shape&gt;【参考方案2】:

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#70c656" />
            <stroke
                android:
                android:color="#53933f" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#70c656"
                android:endColor="#53933f"
                android:angle="270" />
            <stroke
                android:
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

【讨论】:

【参考方案3】:

所以我们在这里使用渐变。如上所述@Dusean Singh 说。如果您将使用角度 270,那么您的渐变将从上到下开始:顶部 -> 中心 -> 底部

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FF0000"
        android:centerColor="#00FF00"
        android:endColor="#0000FF"
        android:angle="270" />
</shape>

如果您将使用 360 度角,那么您的渐变将从左到右开始:左 -> 中心 -> 右

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--  Gradient Bg for listrow -->
    <gradient
        android:startColor="#FF0000"
        android:centerColor="#00FF00"
        android:endColor="#0000FF"
        android:angle="360" />
</shape>

我们来看看效果。以及如何在按钮上应用相同的

<LinearLayout
    android:id="@+id/design_bottom_sheet"
    android:layout_alignParentBottom="true"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:weightSum="2">
    <Button
        android:drawableLeft="@drawable/ic_grid"
        android:layout_
        android:text="Find"
        android:background="@drawable/gradient_button"
        android:textColor="@color/white"
        android:textAllCaps="false"
        android:layout_
        android:layout_weight="1" />
    <Button
        android:drawableLeft="@drawable/ic_card"
        android:layout_
        android:textColor="@color/white"
        android:text="Match"
        android:background="@drawable/gradient_button"
        android:textAllCaps="false"
        android:layout_
        android:layout_weight="1" />
</LinearLayout>

【讨论】:

【参考方案4】:

创建gradient.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
      android:angle="270"
      android:endColor="@color/greenstart"
      android:startColor="@color/greenend" />

</shape>

【讨论】:

以上是关于如何通过xml为android中的按钮添加渐变?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义android Button样式

怎样在android中添加按钮并设置大小

不用代码,如何设置android模拟器的背景色默认为黑色,

如何在android中制作渐变背景

android:背景在材料设计按钮组件中不起作用

向 Xamarin Forms Visual Studio 中的布局添加渐变背景