分类: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 主题基本用法的更多相关文章

  1. Android View.setId(int id) 用法

    Android View.setId(int id) 用法 当要在代码中动态的添加View并且为其设置id时,如果直接用一个int值时,Studio会警告. 经过查询,动态设置id的方法有两种; 1. ...

  2. Android Intent的几种用法全面总结

    Android Intent的几种用法全面总结 Intent, 用法 Intent应该算是Android中特有的东西.你可以在Intent中指定程序要执行的动作(比如:view,edit,dial), ...

  3. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  4. 2.4、Android Studio使用主题编辑器设计主题

    Android Studio包含一个叫主题编辑器的可视的助手,可以提供以下功能: 1. 创建和更改你的app主题 2. 为不同的资源适应主题 3. 普通的UI颜色更改的实时显示 主题编辑器 这一节描述 ...

  5. (转载)Android常用的Dialog对话框用法

    Android常用的Dialog对话框用法 Android的版本有很多通常开发的时候对话框大多数使用自定义或是 Google提供的V4, V7 兼容包来开发保持各个版本的对话框样式统一,所以这里使用的 ...

  6. android studio 导入主题设置,代码风格(附带eclipse 主题代码样式)

    在这里我最想说的,android studio默认主题样式,太low.不适合长时间写代码,看代码颜色不好识别,相对于背景的代码样式,我都不想吐槽了.还是网上下载主题代码样式导入样式.在这里我推荐 Su ...

  7. Android Support Library 23.2用法简析

    写在前面的几句话 前几天谷歌发布了android-support-library-23.2支持库,这一次23.2版本增加了一些新的支持库以及新的功能.接下来这篇文章,就是对这些新功能部分做简单的用法介 ...

  8. Android Drawable 那些不为人知的高效用法

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:[张鸿洋的博客] 1.概述 Drawable在我们平时的 ...

  9. 更改Android Studio的主题背景

    看到别人炫酷的主题,好奇心使然,想要选择一个自己喜欢的炫酷背景,于是乎百度,动手尝试更换各种主题. 保存下来,留着以后想换主题的时候看. 1.Android Studio自带主题 File -> ...

随机推荐

  1. eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面

    eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面,如果不想覆盖的话,可以这么设置: Window->Preferences->General->Se ...

  2. ZH奶酪:Yii PHP sum SQL查询语句

    例子: $sql = 'SELECT SUM(o.price) as `sum` FROM `order` o WHERE o.customer_id ='.$profile->id; $ret ...

  3. iOS——Quartz2D

    0. 复习. 1.基本图形绘制 * 线段(线宽.线段样式) * 矩形(空心.实心.颜色) * 三角形.四边形等形状 1> 说明 - (void)drawRect:(CGRect)rect 什么时 ...

  4. Spring AOP深入理解之拦截器调用

    Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动 ...

  5. java面试第十五天

    网络编程: 多线程+网络: 1.服务器端的等待客户连接代码( while(true) ),服务器端与单个客户端交互的代码放入线程体( run ) 2.客户端如有其他要求,与服务器交互的代码也要放入线程 ...

  6. jprofiler_windows-x64_9_1注册码

    L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038 L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257

  7. 【VMware虚拟化解决方案】配置和部署VMware ESXi5.5

    [VMware虚拟化解决方案]配置和部署VMware ESXi5.5 时间 2014-04-08 10:31:52  让"云"无处不在的博客原文  http://mabofeng. ...

  8. LR基础学习_脚本信息函数

    Action(){ //脚本信息函数. //lr_whoami:返回Vuser的ID,组名称,场景ID信息./*    int id,scid;    char *vuser_group;    lr ...

  9. NFS详解

    00.什么是 NFS (Network FileSystem) NFS 就是 Network FileSystem 的缩写,最早之前是由 sun这家公司所发展出来的. 他最大的功能就是可以透过网络,让 ...

  10. 【php】实现多个一维数组转换成二维循环数组

    1.目的:将下面类型数组转换成模板循环打印二维数组 数组库一维数组: 模板要求循环二维数组: 2.代码: header("Content-type: text/html; charset=u ...