【问题标题】:Android add border to button without losing material theme (using drawable)Android在不丢失材质主题的情况下为按钮添加边框(使用drawable)
【发布时间】:2019-02-02 05:43:22
【问题描述】:

我有一个简单的按钮

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:backgroundTint="@color/add_bg"
        android:textColor="@color/add_fg"
        <!--android:borderColor?="@color/button_border"-->
        android:text="@string/add"/>

我想要白色背景、蓝色文字和蓝色边框。我知道我可以通过here 和许多其他地方的drawable 来实现这一点。但是我观察到,如果您向按钮添加可绘制对象,那么它将失去其所有材质属性(例如阴影以及单击时具有花哨的波纹动画)。那么如何在按钮周围添加边框而又不丢失材质主题动画(点击时的阴影和水滴动画)?

【问题讨论】:

    标签: android android-layout material-design android-button


    【解决方案1】:

    android 自带的大部分物品都只是一组预先打包好的属性。

    几乎不可能期望 Android API 开发人员为每种可能的颜色/边框组合包含一组预打包的属性,但总有一个解决方案!

    不幸的是,正如您所提到的,解决方案确实存在于创建您自己的自定义 XML 文件中,在您掌握它之前,这通常会令人生畏。一旦你这样做了,你也会惊叹于它所允许的灵活性。

    具体针对您的情况,有两种选择...

    1) 创建自定义 XML 边框可绘制对象。

    2)在您的按钮背景属性下设置您的新自定义边框可绘制

    3)然后还通过添加在按钮 xml 属性下设置波纹效果:

        android:foreground="?attr/selectableItemBackground"
        android:clickable="true"
        android:focusable="true"
    

    ----或----

    一种更复杂的方法是制作如下图所示的可绘制对象。这将添加“波纹”按钮效果以及自定义阴影、按钮颜色和边框颜色!

    “对于以后阅读本文但可能经验不足的任何人)

    1)在您的项目视图中转到 res/drawable

    2)右键单击文件夹本身并选择新建/可绘制资源文件

    3)输入文件名 my_ripple_button.xml(根目录并不重要,因为您将用下面的代码替换它)

    4)如果您还没有,请单击文本选项卡

    5)全选文字,基本替换成以下内容:(创建自定义颜色边框的步骤基本相同)

    <?xml version="1.0" encoding="utf-8"?>
    <ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/colorPrimaryDark">
        <item android:id="@android:id/ripple">
            <shape android:shape="rectangle">
                <solid android:color="@color/colorPrimaryDark" />
                <corners android:radius="@dimen/button_radius_large" />
           </shape>
       </item>
    
        <item android:id="@android:id/background">
           <shape android:shape="rectangle">
                <gradient
                    android:angle="90"
                    android:endColor="@color/colorPrimaryLight"
                   android:startColor="@color/colorPrimary"
                    android:type="linear" />
               <corners android:radius="@dimen/button_radius_large" />
            </shape>
        </item>
    </ripple>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多