1. 程式人生 > >android Material主題中的button效果

android Material主題中的button效果

在android5.0新增了ripple的效果,他可以運用到Button,ImageButton,TextView,以及一些佈局容器。

首先,我們看android:Theme.Material.Light主題中設定的各種ripple效果屬性的預設值:

1.<item name="selectableItemBackground">@drawable/item_background_material</item>
2.<item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_material</item>
3.<item name="borderlessButtonStyle">@style/Widget.Material.Light.Button.Borderless</item>
4.<item name="buttonBarButtonStyle">@style/Widget.Material.Light.Button.ButtonBar.AlertDialog</item>

selectableItemBackground在drawable檔案中檔案內容為:有邊界的效果
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:id="@id/mask">
        <color android:color="@color/white" />
    </item>
</ripple>
selectableItemBackgroundBorderless在drawable檔案中檔案內容為:無邊界的效果(需要api21以上)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight" />

borderlessButtonStyle最後引用的style就是如下:

<!-- Borderless ink button -->
    <style name="Widget.Material.Button.Borderless">
        <item name="background">@drawable/btn_borderless_material</item>
        <item name="stateListAnimator">@null</item>
    </style>
他實際上就是設定了background的屬性:
<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>

buttonBarButtonStyle實際上也是呼叫了borderlessButtonStyle的style,就是也是呼叫了相同的background:

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

    <!-- Colored borderless ink button -->
    <style name="Widget.Material.Button.Borderless.Colored">
        <item name="textColor">?attr/colorAccent</item>
        <item name="stateListAnimator">@anim/disabled_anim_material</item>
    </style>

前兩種在xml中設定background即可,如:
android:background="?android:selectableItemBackground"

前兩種在xml中設定style即可,如:
style="?android:buttonBarButtonStyle"