Material Flat Button 上定义的波纹在哪里

Where is ripple defined on Material Flat Button

开启 API 21+ 平面按钮在触摸时波纹。这是在 AppCompat 的什么地方定义的?

我发现在 drawable/v21/abc_btn_colored_material.xml 中定义了 Raised Buttons 上的波纹。但是唯一可绘制的平面按钮是在基础 drawables/abc_btn_borderless_material.xml 中定义的,它没有波纹(很明显)。

那么平面按钮上的波纹是在哪里设置的?

我正在查看 appcompat-v7:23:4.0

编辑:

我确实遵循了 Alexander Mironov 描述的路径,但我的 btn_borderless_material 看起来像:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:state_pressed="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:drawable="@android:color/transparent"/>
</selector>

让我们从 AppCompat 开始我们的旅程 values.xml:

<style name="Widget.AppCompat.Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless"/>

当我们转到父级时,我们有 v21 限定符 values-v21.xml 的专业化。在这里我们看到:

<style name="Base.Widget.AppCompat.Button.Borderless" parent="android:Widget.Material.Button.Borderless"/>

好的,这意味着当 API 为 21 或更高时我们使用 Android 的内置主题。让我们去 styles_material.xml:

   <!-- Borderless ink button -->
    <style name="Widget.Material.Button.Borderless">
        <item name="background">@drawable/btn_borderless_material</item>
        <item name="stateListAnimator">@null</item>
    </style>

然后前往btn_borderless_material。最后我们有了涟漪:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?attr/colorControlHighlight">
    <item android:id="@id/mask"
          android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>