在v21中为AppCompatButton设置样式,使阴影和角半径不为零

时间:2016-04-19 13:54:29

标签: android android-layout android-5.0-lollipop

我在XML布局中定义了一个AppCompatButton,我为它设置了一个主题:

android:theme="@style/CustomAccentOverlay"

我已经设定:

android:stateListAnimator="@null"

删除阴影。我有两个问题。

即使阴影未显示,按钮的高度也会扣除阴影的高度。我应该以其他方式删除阴影,或者我该如何解决这个问题?

按钮有圆角,我希望角落清晰。我无法在按钮上设置背景,因为我想保持标准的涟漪效果,如果我设置了背景,那就消失了(至少我不知道如果设置背景怎么保持它)。我试过设置

<item name="android:bottomLeftRadius">0dp</item>

以及CustomAccentOverlay主题的所有其他角落以及相应的样式,但它不起作用。如何在按钮上将拐角半径设置为零?

谢谢你 索伦

4 个答案:

答案 0 :(得分:6)

使用以下代码作为按钮。

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="NewApi"
    android:color="@color/ripple_color">

    <item android:drawable="@color/normal_state_button_background_color"/>

</ripple>

我将解释这些属性。

  1. 机器人:海拔=&#34; 0dp&#34;和android:stateListAnimator =&#34; @ null&#34;。按钮没有阴影。

  2. android:background。将所需颜色设置为背景。它删除了圆角。

  3. 机器人:?前景=&#34; ATTR / selectableItemBackground&#34; 。按下按钮时会产生涟漪效应。

  4. 更新1:

    看起来像View的android:foreground属性来自API 23.对于下面的API,在drawable-v21文件夹中创建一个带有涟漪的drawable并将其设置为按钮的背景,

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

    对于pre Lollipop版本,在具有相同名称的drawable文件夹中创建一个带有选择器的drawable。

    meteor run ios
    

答案 1 :(得分:3)

  

第一个问题:如何删除按钮的阴影?

以下是答案: 只需将此属性添加到按钮

即可
android:stateListAnimator="@null"
  

第二个问题:如何使按钮的角落锐利而不会失去标准的涟漪效果。   答案如下:但首先你必须制作两个同名的drawble文件,但一个用于api 21以下,一个用于api&gt; 21因为纹波仅可用于api> 21.现在我正在展示如何创建它。仔细阅读以下文字

右键单击drawble文件夹并选择new和“Drawble资源文件”,然后点击下一步然后将drawble命名为你想要的任何内容并按下ok。然后再次右键单击drawble文件夹并选择new和“Drawble resource file”并点击下一步,并将drawble命名为您之前为drawble文件夹命名的内容,但这次在底部您可以看到一个名为“available qualifiers”的部分。转到此部分,在最底部您可以看到“Version”,单击它然后你可以在右边看到一个箭头图标,点击它然后在“平台api级别”中添加21然后按ok。现在如果你展开drawble文件夹你可以看到你创建的drawble文件的两个文件。一旦api那个是21以下和上一次21.打开你创建的drawble文件,并确保你打开最后有“(v21)”。现在从那里删除所有内容并添加以下代码

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

<item>
    <shape>
        <corners android:radius="0dp"/>
        <solid android:color="#D6D7D7"/>
    </shape>
</item>

</ripple>

并将此属性添加到按钮

android:background="@drawable/youdrawblefilethatyouhavecreated"

现在,如果你运行你的应用程序,你可以看到没有阴影,你的按钮有尖角,如果你点击涟漪就会出现。

最后,您的按钮看起来像这样

<android.support.v7.widget.AppCompatButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button 1"
    android:background="@drawable/yourcreatddrawblefile"
    android:stateListAnimator="@null"/>

希望这有帮助!

答案 2 :(得分:3)

听起来你真的想要使用可点击的TextView而不是Button。默认情况下,TextView没有阴影并且有尖角,您可以附加一个点击监听器。请记住,Button只是一个花哨的TextView,它有很多可视化的附加组件,听起来你想删除很多它。

如果您想在TextView上保留涟漪并定义自己的背景,请设置android:foreground="?attr/selectableItemBackground"

编辑:即使其他答案被标记为已接受,我仍然认为OP应该使用带有点击监听器的TextView并将涟漪效果应用于使用按钮。以这种方式可点击的TextView正是Google I / O应用程序如何实现符合Material Design规范的所有平面按钮。

答案 3 :(得分:0)

使用此代码

 <android.support.v7.widget.AppCompatButton
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/colorAccent"
    android:text="@string/button" />