標籤:
分類:C#、Android、VS2015;
建立日期:2016-02-17 一、建立本章樣本主介面
1、介面
2、MainActivity.cs檔案中對應的代碼
在CreateChItems()方法中添加下面的代碼:
chItems.Add(new Chapter() { ChapterName = "第8章 樣式和主題", ChapterItems = new ChItem[] { new ChItem { type = typeof(ch0801ThemeDemo1), Title = "例8-1 主題基本用法", Desc = "示範如何設定應用程式層級的主題和僅本頁使用的主題" }, new ChItem { type = typeof(ch0802ThemeDemo2), Title = "例8-2 動態選擇和設定主題", Desc = "示範如何動態選擇和設定僅當前介面使用的主題" }, new ChItem { type = typeof(ch0803ThemeDemo3), Title = "例8-3 自訂佈景主題", Desc = "示範如何自訂佈景主題及其樣式讓其更符合你的想法" }, new ChItem { type = typeof(ch0804ThemeDemo4), Title = "例8-4 讓主題自適應不同的Android版本", Desc = "示範如何讓不同的Android系統自動使用相應的主題" }, } });
二、主題基本用法
1、查看主題
在.axml檔案的【設計介面】中,可直接觀察某種主題應用的效果。辦法如下:在對應的設計介面中,單擊【Theme】à【More Themes】,此時就會彈出所示的所有主題:
選擇某種主題,單機【OK】按鈕,它就會將所選主題應用到當前的設計介面中。
注意:這種方式僅僅是為了觀察採用哪種主題比較合適。確定了合適的主題後,還需要在資訊清單檔或者活動檔案中指定所選的主題,此時它才會真正起作用。
2、指定主題
有兩種指定主題(包括內建的主題和自訂佈景主題)的方式。
(1)在資訊清單檔中指定所有頁面預設使用的主題
以下兩種形式可任選其一,但不要兩種形式都去指定。
第一種方式是在properties檔案夾下的AndroidManifest.xml檔案中配置“應用程式層級”的主題,應用程式層級的主題對所有頁面都有效。例如:
<application android:label="MyApp"
android:theme="@android:style/Theme.DeviceDefault.Light">
</application>
第二種方式是在properties檔案夾下的AssemblyInfo.cs檔案中配置應用程式層級的主題,應用程式層級的主題對所有頁面都有效。例如:
[assembly:Application(Theme = "@android:style/Theme.DeviceDefault.Light")]
(2)在Activity中指定本頁使用的主題
除了指定應用程式層級的主題外,還可以在某個活動中(.cs檔案中)指定僅適用於當前活動頁面的主題,用這種方式指定的主題僅對該活動有效,其他Activity仍會使用預設的主題。例如:
[Activity(Theme = "@android:style/Theme. DeviceDefault.Light.DarkActionBar",
Label = "MyApp", MainLauncher = true, Icon = "@drawable/icon")]三、材料主題(Material Theme)
材料(Material)也叫材質,學過3D開發的對Material這個概念肯定不陌生,不管中文怎麼翻譯它,記住就是這個英文單詞就OK了。
Material Theme是從Android 5.0(API 21)開始提供的內建主題,常用有:
- Theme.Material – 黑色材質背景,這是Android 5.0預設的主題。
- Theme.Material.Light –淺色材質背景。
- Theme.Material.Light.DarkActionBar – 淺色材質背景,但活動條(ActionBar)是黑色的材質背景。
由於可以將材質設定為各種類型的圖形或映像,因此這種主題可提供非常大的靈活性。
使用Material Theme的要求
(1)必須安裝Android 5.0 (API 21)或更高版本的Android SDK。
(2)需要使用Java JDK 1.7或更高版本的JDK編譯Android應用程式。
(3)Xamarin.Android版本不能低於4.2。
由於前面章節介紹的安裝開發環境已經滿足了這些要求,所以可直接使用材質主題。
註:Xamarin for VS 4.0.1717對應的Xamarin.Android版本為6.0.0.35,可在VS2015中通過【協助】查看你當前安裝的Xamarin.Android版本。
下面的代碼示範了如何在應用程式層級使用材質主題(對所有Activity都有效):
<application android:label="MyApp"
android:theme="@android:style/Theme.Material.Light">
</application>
也可以在AssemblyInfo.cs檔案中配置它。例如:
[assembly: Application(Theme="@android:style/Theme.Material.Light")]
下面的代碼示範了如何在Activity中使用材質主題(僅對該Activity有效):
[Activity(Label = "MyApp", MainLauncher = true, Icon = "@drawable/icon",
Theme = "@android:style/Theme.Material.Light")]
public class MainActivity : Activity
{
……
}四、樣本-ch0801ThemeDemo
該樣本僅為了觀察分別指定應用程式層級的主題和僅適用於某個活動主題的效果。
1、運行
2、程式碼分析
從運行中可以看出,由於左圖沒有在ch0801ThemeDemo1.cs檔案中指定Theme,因此它使用的主題是資訊清單檔(AndroidManifest.xml)中定義的主題,以這種方式指定的Theme適用於所有頁面。
資訊清單檔(AndroidManifest.xml)中的相關代碼如下:
<application android:label="MyDemos" android:theme="@android:style/Theme.DeviceDefault.Light.DarkActionBar">……</application>
ch0801ThemeDemo1.cs檔案的代碼如下:
using Android.App;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{ [Activity(Label = "【例8-1】主題基本用法")] public class ch0801ThemeDemo1 : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch0801_ThemeDemo1); FindViewById<Button>(Resource.Id.btn1).Click += delegate { StartActivity(typeof(ch0801ThemeDemo2)); }; } }}
對於運行中的右圖來說,由於在ch0801ThemeDemo2.cs檔案中指定了Theme,因此這個頁面使用的主題就是這個Theme,而不是資訊清單檔中指定的主題,但該Theme僅適用於這個頁面。
ch0801ThemeDemo2.cs檔案的代碼如下:
using Android.App;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{ [Activity(Label = "【例8-1】主題基本用法", Theme = "@android:style/Theme.DeviceDefault")] public class ch0801ThemeDemo2 : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch0801_ThemeDemo2); FindViewById<Button>(Resource.Id.btn1).Click += delegate { StartActivity(typeof(ch0801ThemeDemo1)); }; } }}
【Android】8.1 主題基本用法