棒棒糖上的Android按钮波纹和棒棒糖前的亮点

前端之家收集整理的这篇文章主要介绍了棒棒糖上的Android按钮波纹和棒棒糖前的亮点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,所以我很困惑,想知道是否有人能指出我正确的方向.

在Lollipop和pre-lollipop上使用Google Play商店

您将在棒棒糖上看到可选择的视图具有涟漪效应.

在pre-lollipo上,你会获得这种高光效果.

这是怎么做到的?

在我的应用程序中,我有一个包含此选择器的drawable-v21目录

它基本上是在我的背景上产生涟漪

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ripple xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:color="?android:colorControlHighlight">
  4. <item android:id="@android:id/mask" android:drawable="@android:color/white"/>
  5. <item android:drawable="@color/colorAccentWith92PercentOpacity"/>
  6. </ripple>

但是,其他答案说要使用

android:background=”?attr/selectableItemBackground”

要获得前棒棒糖的高光效果,但这会覆盖我的背景.我怎么能在我目前的背景之上设置它?

我还需要为我的应用程序中的每种按钮创建一个波纹drawable(在drawble-v21中)吗?我如何为回收商查看项目执行此操作?

是什么让这个问题与众不同

我不想要预先棒棒糖的涟漪我问的是开发者如何有效地使他们的按钮在棒棒糖上产生波纹并且对前的高光效果

解决方法

选项1

主题中定义colorControlHighlight,只要您使用默认的appcompat-v7按钮,高亮颜色就应该是开箱即用的.

选项2

这是一个示例,说明如何使用一些交叉渐变动画和阴影向后移植“材质”按钮样式,而不使用外部库.可以帮助你.

如果按钮将是深色背景上的白色文本(@ color / control_normal),并且高亮显示

值/的themes.xml

在这里,我将覆盖整个主题的默认按钮样式:

  1. <style name="AppTheme" parent="Base.AppTheme">
  2. <item name="buttonStyle">@style/Widget.AppTheme.Button</item>
  3. </style>

值/ integers.xml

  1. <!-- Some numbers pulled from material design. -->
  2. <integer name="button_pressed_animation_duration">100</integer>
  3. <integer name="button_pressed_animation_delay">100</integer>

值-V21 / styles.xml

Lollipop的按钮样式,它理解主题叠加并默认使用波纹.让我们用适当的颜料为它涂上颜色:

  1. <style name="Widget.AppTheme.Button" parent="Widget.AppCompat.Button">
  2. <!-- On Lollipop you can define theme via style. -->
  3. <item name="android:theme">@style/ThemeOverlay.AppTheme.Button</item>
  4. </style>
  5.  
  6. <style name="ThemeOverlay.AppTheme.Button" parent="ThemeOverlay.AppCompat.Dark">
  7. <!-- The magic is done here. -->
  8. <item name="colorButtonNormal">@color/control_normal</item>
  9. </style>

价值观/ styles.xml

在棒棒糖之前它变得棘手.

  1. <style name="Widget.AppTheme.Button" parent="Widget.AppCompat.Button">
  2. <item name="android:background">@drawable/button_normal_background</item>
  3. </style>

绘制/ button_normal_background.xml

这是整个按钮的复合绘图.

  1. <inset
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:insetLeft="@dimen/abc_button_inset_horizontal_material"
  4. android:insetTop="@dimen/abc_button_inset_vertical_material"
  5. android:insetRight="@dimen/abc_button_inset_horizontal_material"
  6. android:insetBottom="@dimen/abc_button_inset_vertical_material">
  7. <layer-list>
  8. <!-- Shadow. -->
  9. <item
  10. android:drawable="@drawable/button_shadow"
  11. android:top="-0dp"
  12. android:bottom="-1dp"
  13. android:left="-0dp"
  14. android:right="-0dp"/>
  15. <item
  16. android:drawable="@drawable/button_shadow_pressable"
  17. android:top="-0dp"
  18. android:bottom="-3dp"
  19. android:left="-1dp"
  20. android:right="-1dp"/>
  21. <!-- Background. -->
  22. <item android:drawable="@drawable/button_shape_normal"/>
  23. <!-- Highlight. -->
  24. <item>
  25. <selector
  26. android:enterFadeDuration="@integer/button_pressed_animation_duration"
  27. android:exitFadeDuration="@integer/button_pressed_animation_duration">
  28.  
  29. <item
  30. android:drawable="@drawable/button_shape_highlight"
  31. android:state_focused="true"
  32. android:state_enabled="true"/>
  33. <item
  34. android:drawable="@drawable/button_shape_highlight"
  35. android:state_pressed="true"
  36. android:state_enabled="true"/>
  37. <item
  38. android:drawable="@drawable/button_shape_highlight"
  39. android:state_selected="true"
  40. android:state_enabled="true"/>
  41. <item android:drawable="@android:color/transparent"/>
  42. </selector>
  43. </item>
  44. <!-- Inner padding. -->
  45. <item android:drawable="@drawable/button_padding"/>
  46. </layer-list>
  47. </inset>

绘制/ button_shadow.xml

这是未按下时的阴影.

  1. <shape
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <corners
  5. android:bottomLeftRadius="3dp"
  6. android:bottomRightRadius="3dp"
  7. android:topLeftRadius="2dp"
  8. android:topRightRadius="2dp"/>
  9. <solid android:color="#2000"/>
  10. </shape>

绘制/ button_shadow_pressable.xml

这是按下状态下的扩展阴影.当你近距离观察结果效果看起来很粗糙,但距离远远不够好.

  1. <selector
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. tools:ignore="UnusedAttribute"
  5. android:enterFadeDuration="@integer/button_pressed_animation_duration"
  6. android:exitFadeDuration="@integer/button_pressed_animation_duration">
  7. <item
  8. android:state_pressed="true"
  9. android:state_enabled="true">
  10. <shape
  11. xmlns:android="http://schemas.android.com/apk/res/android"
  12. android:shape="rectangle">
  13. <corners
  14. android:bottomLeftRadius="5dp"
  15. android:bottomRightRadius="5dp"
  16. android:topLeftRadius="3dp"
  17. android:topRightRadius="3dp"/>
  18. <solid android:color="#20000000"/>
  19. </shape>
  20. </item>
  21. <item android:drawable="@android:color/transparent"/>
  22. </selector>

绘制/ button_shape_normal.xml

这是主要的按钮形状.

  1. <shape
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <corners android:radius="@dimen/abc_control_corner_material"/>
  5. <solid android:color="@color/control_normal"/>
  6. </shape>

绘制/ button_padding.xml

只需额外填充即可与“材质”按钮完全一致.

  1. <shape
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <solid android:color="@android:color/transparent"/>
  5. <padding
  6. android:left="@dimen/abc_button_padding_horizontal_material"
  7. android:top="@dimen/abc_button_padding_vertical_material"
  8. android:right="@dimen/abc_button_padding_horizontal_material"
  9. android:bottom="@dimen/abc_button_padding_vertical_material"/>
  10. </shape>

绘制/ button_shape_highlight.xml

这是在正常按钮形状上绘制的高亮按钮形状.

  1. <shape
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <corners android:radius="@dimen/abc_control_corner_material"/>
  5. <solid android:color="@color/control_highlight"/>
  6. </shape>

@ color / control_highlight可以指向

> @ color / ripple_material_dark – 半透明白色,用于深色背景> @ color / ripple_material_light – 半透明黑色,用于浅色背景>您定义的任何其他颜色.

猜你在找的Android相关文章