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

Nei*_*ard 8 android android-layout android-5.0-lollipop

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

android:theme="@style/CustomAccentOverlay"
Run Code Online (Sandbox Code Playgroud)

我已经设定:

android:stateListAnimator="@null"
Run Code Online (Sandbox Code Playgroud)

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

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

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

<item name="android:bottomLeftRadius">0dp</item>
Run Code Online (Sandbox Code Playgroud)

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

谢谢
Søren

Bob*_*Bob 8

使用以下代码作为Button.

<android.support.v7.widget.AppCompatButton
android:layout_width="200dp"
android:layout_height="200dp"
android:text="Button"
android:stateListAnimator="@null"
android:elevation="0dp"
android:background="@android:color/darker_gray"
android:foreground="?attr/selectableItemBackground"
/>
Run Code Online (Sandbox Code Playgroud)

我将解释这些属性.

  1. android:elevation ="0dp"和android:stateListAnimator ="@ null".按钮没有阴影.

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

  3. android:foreground ="?attr/selectableItemBackground".按下按钮时会产生涟漪效应.

更新1:

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

<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>
Run Code Online (Sandbox Code Playgroud)

对于pre Lollipop版本,在具有相同名称的drawable文件夹中创建一个带有选择器的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>
Run Code Online (Sandbox Code Playgroud)