材料平面按钮

时间:2016-07-22 15:36:47

标签: android android-appcompat

On API 21+ Flat Buttons触摸时会产生波纹。这个定义在AppCompat中的哪个位置?

我可以发现凸起按钮上的纹波在drawable/v21/abc_btn_colored_material.xml中定义。但唯一的平面按钮drawable是在基座drawables/abc_btn_borderless_material.xml中定义的,它没有波纹(显然)。

那么在平面按钮上设置波纹的位置是什么?

我正在寻找appcompat-v7:23:4.0

编辑:

我确实按照亚历山大·米罗诺夫描述的路径,但我的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>

1 个答案:

答案 0 :(得分:2)

让我们通过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>