歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 如何在 Android 應用程序中使用自定義主題

如何在 Android 應用程序中使用自定義主題

日期:2017/3/1 10:14:54   编辑:Linux編程

自從Android4.0發布以來,我們已經看到越來越多的應用程序遵循新的 Android設計指南。該指南介紹了Android的holo主題,並提供了一個既有現代感又獨特的用戶體驗。從今年的谷歌開發者大會談論的“ 成功的Android設計”上,我們得到了一些重要的心得:



對於這篇文章,我假設你已經有“成功設計”的部分,所以讓我們走進更高一層的“應用涅槃”。更具體地說,我將描述一些有用的模式應用到你的應用程序中,讓你的應用更具品牌化。

簡單樣式

在Android中,定義外觀最簡單的方式是直接設置屬性在視圖對象上。由於要對整個應用程序設置樣式,這種方法就顯得不是很方便了。因此,我們可以創建樣式來綁定視圖屬性。但要注意的是,樣式只能設置在xml裡。這意味著,我們在創建/加載視圖的時候,只能一次設置一個樣式。下面是如何在res/values/styles.xml文件中給TextView設置屬性的示例。
<style name="CustomText" parent="<A href="http://www.linuxidc.com" target=_blank rel=nofollow>@android</A> :style/TextAppearance.Medium">
<item name="android:textSize">20sp</item> <item name="android:textColor">#008</item>
</style>

我們引用@style/CustomText樣式應用在我們的layout.xml文件中。該樣式引用了一個父樣式 @android:style/TextAppearance.Medium。由於開始樣式引自android: 命名空間,那麼我們這個樣式默認也隨android平台。

創建主題綁定樣式

假設我們要改變我們所有TextView的文字大小和顏色,並且不需要明確設置每一個TextView。這是一個非常常見的情況,幸運的是,Android提供了一個非常強大的主題機制。從本質上講,主題就是樣式資源本身,使用“key”指向具體的樣式。一個視圖對象基於這個key可以查看到具體的樣式。下面是一個簡單的例子,在res/values/themes.xml文件:

<style name="Theme.MyApp" parent="<A href="http://www.linuxidc.com" target=_blank rel=nofollow>@android</A> :style/Theme.Holo">
<item name="android:textAppearance">@style/CustomText</item>
</style>

如上所述,主題是樣式資源本身,所以我們聲明一個Theme.App繼承自Android平台提供的holo主題。我們將我們的CustomText樣式指定到android:textAppearance屬性。屬性就是一個預定義的“變量”,它可以被其他資源元素引用。事實上,它也可以創建自定義屬性在res/values/attr.xml文件。

現在有趣的事情來了。我們的主題Theme.MyApp不僅可以通過AndroidManifest.xml的設置應用到Activity上,它也可以在運行時在代碼中設置。你將不得不重新啟動當前Activity(或使用ContextWrapper應用UI的主題部分),但它使主題更加動態。

如何找出視圖上的樣式屬性

主題最常見的問題是要找出哪些屬性適用於哪一個視圖。唯一可靠的方法,在所有情況下,看看視圖源碼是否有我們要的主題。下面是Android API等級16(果凍豆)TextView類的代碼片段。這段代碼在構造函數中執行(代碼段落被省略)。

final Resources.Theme theme = context.getTheme();
TypedArray a = theme.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextViewAppearance, defStyle, 0);
int ap = a.getResourceId(com.android.internal.R.styleable.TextViewAppearance_textAppearance, -1);
TypedArray appearance = theme.obtainStyledAttributes(ap, com.android.internal.R.styleable.TextAppearance);
textColor = appearance.getColorStateList(attr);

該代碼片段顯示了文本的顏色是如何從當前主題的TextAppearance屬性提取出來的。通過閱讀這段初始化代碼,我們通常可以知道什麼樣的元素可以被配置。

我們必須意識到,雖然不同的Android版本應用不同的屬性,但Android高版本通常支持低版本的屬性,新屬性顯然不被低版本識別。我希望我們會很快得到更新檢查,這樣就能引用Android新版本推出的主題屬性。

總結

Android4.0的主題變得更加強大了,98%屬性你可以通過代碼設置,並且現在可以在主題化之前設置樣式。使用自定義主題時,除了有更大的視覺靈活性,你還可以減少在XML布局和Java代碼中的混亂,完全可以投入到應用程序的邏輯。


英文原文

Copyright © Linux教程網 All Rights Reserved