2016-02-19 60 views
1

我正在学习材质主题,有些东西在低于21的版本中不起作用,如涟漪效应,更改状态栏颜色和主要文本颜色,查看高程...即使我使用v7库。材质主题兼容性

对于视图立面我试过ViewCompat.setElevation(view, value)并不起作用。任何人都知道为什么以及我该怎么做?

对于涟漪效应,我尝试将属性android:background="?android:attr/selectableItemBackground"放入XML中,但即使不起作用。我希望有一种方法可以在任何版本中使用代码进行工作(无需为21版本和21版本分开编码)。有没有办法做到这一点?任何人都知道?

感谢

+0

使用此图书馆https://github.com/navasmdc/MaterialDesignLibrary –

+0

对于Lollipop之前的版本,我们必须与Material Design做出一些让步。例如,涟漪效应运行在一个特殊的渲染线程,这是只有自从棒棒糖,看到这个问题http://stackoverflow.com/questions/33872488/why-creating-ripple-effect-is-difficult-on-pre-棒棒糖安卓设备 –

+0

另一个参考:https://github.com/wasabeef/awesome-android-ui –

回答

3

该协议是材料设计是一种设计语言,采用由设计师准备一致的UI/UX的概念。这不是100%实施。

Android棒棒糖实现了一些有助于创建Material Design - compilant应用程序的内容。这些包括阴影和涟漪。棒棒糖没有高层次的材料设计,比如浮动动作按钮,小吃店,浮动TextView标签等等。这些可作为设计支持库的一部分。你也可以自己创建它们。

在某种程度上,旧版Android版本可以实现阴影和涟漪效果。例如,可以创建可绘制的动画波纹,将其用作按钮的背景,并对触摸事件做出反应。无法使其顺利运行,因为这需要在仅在棒棒糖和棉花糖上提供的后台线程中运行动画和渲染。另一个例子是CardView的圆形显示,高程系统(不是阴影,绘图顺序)和真正圆角。

彩色/半透明状态栏是​​一个完全为棒棒糖和棉花糖保留的事物的例子,因为它是系统的一部分,根本不能回溯。另一个例子是新的过渡系统。

即使在棒棒糖上也不支持一些东西。例如浮动EditText的选择工具栏。它仅在棉花糖上可用。任何Android版本都不支持SVG图形。 Lollipop和Marshmallow上的矢量图形是一种支持常用标签和设置的一种SVG实现。如果您希望在应用中使用优质的矢量图形,最好使用第三方SVG阅读器和渲染器。

ViewCompat和AppCompat使事情编译。这并不意味着这些东西会起作用,看起来像棒棒糖。设计支持库添加小部件,但其中大部分不能像棒棒糖上的应用那样工作。例如,CardView不会真正切角,阴影是用渐变绘制的,状态并非真正的动画。你提到的两件事情是这样的(伪)来实现:

ViewCompat.setElevation(view, value){ 
    if(Lollipop) 
     view.setElevation(value); 
    else 
     // do nothing 
} 

selectableItemBackground = Lollipop ? new RippleDrawable() : grayColor 

有一堆散落在GitHub的材料设计实现的。其中一些只实现了一件事,比如RippleDrawable或FAB。其他图书馆为小部件,阴影等提供了非常完整的支持。

谷歌正在设计支持库,增加更多的小部件。它虽然没有涟漪或阴影,但由于性能和建筑上的困难,可能不会有它们。

我也有自己的图书馆。我对Material Design非常着迷,并且由于缺乏实现而感到沮丧,所以我开始着手自己实现阴影,涟漪,动画,小工具和其他东西。它是开源的,免费使用,你可以在这里找到它:https://github.com/ZieIony/Carbon

编辑:RippleDrawable

  1. 你需要一个RippleDrawable实现。这应该很容易,因为来源是开放的。我的实现在这里:https://github.com/ZieIony/Carbon/blob/master/carbon/src/main/java/carbon/drawable/RippleDrawableFroyo.java

  2. 然后用你的颜色和样式创建一个实例。将其设置为背景。

  3. 在视图的onTouchEvent中运行RippleDrawable的动画。

用无边界模式,多个波纹,图层,可绘制状态和所有东西来准备一个完整的纹波要复杂得多。如果你愿意,你可以在碳中找到所有这些(除了多个涟漪)。它不仅是xml,还覆盖了方法,扩展小部件,布局,属性和样式。

github上有很多简单的涟漪实现。如果它足够给你,你可以下载一个库并使用它。例如这一个:https://github.com/balysv/material-ripple

如果你想使用从xml充气的涟漪,这也是可能的。看看这个图书馆:https://github.com/ozodrukh/RippleDrawable

+0

好友,谢谢。你的回答很棒! 如果不打扰你,请稍等一下,你可以在这里发表一个关于你所说的关于创建一个可绘制的动画波纹的简单例子,我是这样的新...(只需XML就足够了) 谢谢 – Anita

+0

你走了。 RippleDrawable的实现相当复杂,所以这里只是一个想法,从哪里开始。 – Zielony

+0

是啊!非常感谢! – Anita