2016-02-19 91 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