譯文出自:掘金翻譯計畫
譯者:yueyong
校對者:rickon,tuaran
從 lollipop 開始,你可以在任何需要使用其他可繪製型別的地方使用vectordrawables
(使用標準的@drawable/foo
語法引用它們),但是我建議始終使用 androidx 實現。
這會顯著增加其使用平台的範圍,不僅如此,它還支援將特性和 bug 修復程式向後移植到舊平台。例如,使用 androidx 中的vectordrawablecompat
可以:
基於這些原因,你應該始終使用 androidx,即使你很幸運地將你的minsdkversion
設定成 24。這沒什麼不好的,如果/當vectordrawable
在未來擴充套件了新的功能,並且它們也被新增到 androidx 中,那麼它們就可以直接使用,而不需要重新檢查**。
alex lockwood是這麼說的:
為了使用 androidx 向量支援(androidx vector support),你需要做 2 件事情:
您需要在應用的build.gradle
中選擇加入androidx
向量支援:
android
}複製**
如果minsdkversion
< 21,這意味著 android gradle 外掛程式無法生成向量資源的 png 版本 —— 如果我們使用 androidx 庫的話就不用擔心這個問題。
通過預設的 aapt(android 資產包裝工具)版本資源。它也被傳遞給構建工具鏈。這意味著,如果你在res/drawable/
中宣告乙個vectordrawable
,它會為你將其自動移動到res/drawable-v21/
,因為系統知道這就是vectordrawable
類被引入的時候。
這可以防止屬性 id 衝突 —— 在vectordrawables
中使用的屬性(android:pathdata
,android:fillcolor
等)都有乙個整數 id,這些 id 是在 api 21 中新增的。在老版本的 android 上,沒有任何東西可以阻止 oem 使用任何"無人認領」的 id,因此在較老的平台上使用較新的屬性是不安全的。
imageview
,imagebutton
:
checkbox
,radiobutton
:):
這些要求會影響你建立布局或訪問資源所使用的方式。以下是一些考慮到的實際因素。
不幸的是,有很多地方你可能想要在不提供 compat 屬性的檢視上指定 drawables(例如,對於progressbar
來說沒有indeterminatedrawablecompat
屬性)。你仍然可以使用 androidx vectors,但你需要對**作如下更改:
spdx-license-identifier: apache-2.0 */
val progressbar = findviewbyid(r.id.loading)
progressbar.indeterminatedrawable = drawable
複製**
如果您正在使用資料繫結,那麼可以使用自定義繫結介面卡來完成此操作:
spdx-license-identifier: apache-2.0 */
@bindingadapter("indeterminatedrawablecompat")
fun bindindeterminateprogress(progressbar: progressbar, @drawableres id: int)
複製**
spdx-license-identifier: apache-2.0 -->
type="your.package.r"
alias="r" />
...複製**
向後移植(譯者注:原文是 back-ported ,wikipedia 上解釋是把新版本上的東西移植到老版本上去
,這裡翻譯成向後移植)。這是statelistdrawable
的乙個版本,具有狀態之間的動畫轉換(以animatedvectordrawables
的形式)。你不需要申明乙個過渡。因此,如果你只需要乙個可以使用 androidx 來擴充子向量的statelistdrawable
,那麼你可以使用:
spdx-license-identifier: apache-2.0 -->
"true" android:drawable="@drawable/some_vector" />
"@drawable/some_other_vector" />
複製**
一切都歸功於這個天才黑客: twitter.com/alexjlockwo…
有時你需要在無法控制何時或如何載入的地方使用 drawable。例如:通知,主螢幕小部件或主題中指定的某些資源(例如,在建立預覽視窗時設定由平台載入的android:windowbackground
)。在這些情況下,你不負責載入 drawable,因此沒有機會整合 androidx 支援,你也就無法在 api 21 之前使用這些向量資源了?。
res/
drawable-xxhdpi/
foo.png <-- raster
drawable-anydpi-v21/
foo.xml <-- vector
drawable-anydpi-v24/
foo.xml <-- vector with fancy features
複製**
請注意,除了 api 級別限定符之外,我們還需要在此處包含anydpi
資源限定符。這是由於資源限定符優先順序的工作方式導致的。任何在drawable- dpi
中的資源都被認為是比在drawable-v21
更好的選擇。
本文旨在強調使用 androidx 向量支援(androidx vector support)的好處以及一些你需要注意的限制。使用 androidx 支援既可以在更多平台版本和後端功能上使用向量資源,也可以讓你接收任何未來的更新。
即將推出:為 android 建立向量資源
即將推出:android vectordrawables
分析
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計畫 對譯文進行修改並 pr,也可獲得相應獎勵積分。文章開頭的本文永久鏈結即為本文在 github 上的 markdown 鏈結。
譯 在 Android 應用中使用向量資源
譯文出自 掘金翻譯計畫 譯者 yueyong 校對者 rickon,tuaran 從 lollipop 開始,你可以在任何需要使用其他可繪製型別的地方使用vectordrawables 使用標準的 drawable foo語法引用它們 但是我建議始終使用 androidx 實現。這會顯著增加其使用平...
譯 在C 中使用LINQ To SQL
譯文出處 今天在這個話題中,我給大家分享乙個在c 程式設計中非常有趣和十分有用的特性。說明 linq language integrated query 整合查詢語言 linq是微軟在.net framework 3.5中信增加的乙個特性。它是用來查詢資料庫和對資料庫查詢的本地集合帶來安全性。它非常...
譯 在大型應用中使用 Redux 的五個技巧
本文講的是 譯 在大型應用中使用 redux 的五個技巧,譯文出自 掘金翻譯計畫 譯者 loveky 校對者 stormrabbit 第二點 把資料物件,對資料物件的修改以及其它 ui 狀態區分開 第三點 在單頁應用的不同頁面間共享資料,以及何時不該這麼做 第四點 在狀態中的不同節點復用通用的 re...