最近項目開發中,圖標資源我儘可能使用了矢量圖,然而配置了基本的兼容設置,程序在低版本中運行仍是出現了問題。java
xml佈局文件中,在TextView中使用矢量圖,好比android:drawableStart,android:drawableStart這些屬性直接引用矢量圖資源。這樣在Android5.0及以上是沒問題的,可是5.0如下就拋出找不到圖片資源的問題。android
support庫並無爲AppcompatTextView,AppcompatButton等控件適配設置矢量圖屬性,反正我就記得ImageView,ImageButton有srcCompat屬性就是適配了的。api
基礎配置(必須):佈局
1 在gradle里加上vectorDrawables 兼容支持gradle
android { ... defaultConfig { ... vectorDrawables.useSupportLibrary = true } ... }
2 在Application或者Activity上加上AppCompateDelegate開啓CompatVectorFromResources支持ui
/** * vector兼容5.0如下系統 */ static { int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion < 21){ //適配android5.0如下 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } }
若是將就Android4.4,Button就不能用矢量圖,要用位圖,那還叫錘子的兼容支持,我也不知道Google官方爲毛不在兼容控件上多加幾個支持屬性。spa
參考stackOverFlow的回答,Button,TextView,應用矢量圖,保險的是先把矢量圖轉爲selector,而後selector代替矢量圖使用,我以爲這是最佳的辦法。設計
例如:code
<Button style="@style/SettingItemTheme" android:layout_width="match_parent" android:layout_height="@dimen/setting_item_height" android:text="@string/my_setting" android:id="@+id/my_btn_setting" android:drawableStart="@drawable/selector_setting" android:drawableEnd="@drawable/selector_right"/>
selector_setting.xmlxml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_my_setting"/> </selector>
這裏android:drawableStart
,android:drawableEnd
,我引用的是selector,可是selector裏面就是一個默認的矢量圖,但用這種方式佈局,在Android4.4下運行程序就不會報錯。
若是項目作了大半,忽然說以前的矢量圖不能用,要改成位圖,這是很崩潰的。
最多見的設置界面:
我不知道各位實現設置Item的方式是怎樣的,我實現UI的原則是能用一個控件實現就用一個實現,因此Item我用一個Button控件就實現了。Button
,TextView
自帶drawableStart
屬性,能夠在上下左右放圖標,因此何須要用LinearLayout包三個控件實現呢。
例如:
<Button style="@style/SettingItemTheme" android:layout_width="match_parent" android:layout_height="@dimen/setting_item_height" android:text="@string/my_vehicle_manage" android:id="@+id/my_btn_vehicle_manage" android:drawableStart="@drawable/selector_vehicle_manage" android:drawableEnd="@drawable/selector_right"/>
可是若是drawableStart引用的是位圖,這樣圖標的大小就很難調節,老是要找設計師從新切圖,麻煩。可是用vector向量圖就能夠經過android:width
,android:height
調大小,這對開發來講很方便。