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>
答案 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>