分类:C#、Android、VS2015;

创建日期:2016-02-17

一、简介

在Android系统中,除了内置的主题外,开发人员还可以自定义主题。一般通过在Resources/value文件夹下创建一个style.xml文件来设置自定义主题的样式,比如在该文件中设置默认的颜色、字体大小、背景色等。

Andoid提供的主题公开了下面的特性(attributes),自定义主题时,在style中重写对应的特性即可。

  • colorPrimary – 应用程序工具条的颜色。
  • colorPrimaryDark – 状态条的颜色,它是深色的colorPrimary 。
  • colorAccent – 控件颜色,例如复选框、单选按钮、文本框等。
  • windowBackground – 屏幕背景色。
  • textColorPrimary – 应用程序的文本颜色。
  • statusBarColor – 状态条颜色。
  • navigationBarColor – 导航条颜色。

这些特性的含义可通过下图来直观地理解:

默认情况下,statusBarColor的值设置为colorPrimaryDark的值,也可以将statusBarColor设置为纯色,或者将它设置为 @android:color/transparent,这样可以让上面的状态栏透明。另外,也可以将 navigationBarColor 设置为 @android:color/transparent,即:让下面的导航栏透明。

二、示例—ch0803ThemeDemo

1、运行截图

2、设计步骤

下面的步骤演示了如何创建自定义主题。

(1)colors.xml文件--创建自定义的颜色

在Resources/values文件夹下添加一个colors.xml文件,并在该文件中定义你准备使用的颜色、背景等自定义的样式。例如:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<color name="my_blue">#3498DB</color>
<color name="my_green">#77D065</color>
<color name="my_purple">#B455B6</color>
<color name="my_gray">#738182</color>
</resources>

当然,你可以根据需要随时修改它。

(2)styles.xml文件--创建自定义的样式

在Resources/values文件夹下添加一个styles.xml文件,并在styles.xml中添加资源,指定自定义的主题名称(name)和它从parent继承的样式。

例如,下面的代码在styles.xml中定义一个MyTheme:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<!—parent用于指定父类是哪个主题-->
<style name="MyTheme" parent="android:Theme.Material.Light">
<!—重写相关的颜色 -->
<item name="android:colorPrimary">@color/my_blue</item>
<item name="android:colorAccent">@color/my_purple</item>
</style>
</resources>

通过以上两个步骤,就可以使用自定义主题了。

另外,在style.xml文件中还可以包含多个自定义的主题。下面是Resources/vales-21文件夹下style.xml文件的完整示例代码:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MyTheme" parent="android:Theme.Material.Light.DarkActionBar">
</style> <style name="My0803DemoTheme" parent="android:Theme.Material.Wallpaper">
<item name="android:colorPrimary">@color/myBlue</item>
<item name="android:textSize">14sp</item>
<item name="android:colorAccent">@color/myPurple</item>
</style>
</resources>

注意:Resources/vales-21文件夹下style.xml文件仅对Android 5.0(API 21)及更高版本的Android系统起作用,低于Android 5.0的系统不会应用这种样式。

(3)ch0803ThemeDemo.cs文件--引用自定义的主题

要在应用程序级别使用名为“MyTheme”的主题让其对所有页面都起作用,只需要修改AndroidManifest.xml文件的配置:

<application android:label="MyDemos" android:theme="@style/MyTheme">
</application>

要在某个活动页面使用自定义的主题让其近对该页面起作用,只需要在对应的Activity中声明它:

[Activity(Label = "MyActivity", Theme = "@style/MyTheme")]

下面是ch0803ThemeDemo.cs文件的完整代码。在Android 6.0系统中运行时,会自动引用Resources/vales-21文件夹下style.xml文件中自定义的My0803DemoTheme,而不是引用Resources/vales文件夹下的style.xml:

using Android.App;
using Android.OS;
namespace MyDemos.SrcDemos
{
[Activity(Label = "【例8-3】自定义主题",Theme = "@style/My0803DemoTheme")]
public class ch0803ThemeDemo3 : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch0803_ThemeDemo3);
}
}
}

【Android】8.3 自定义主题的更多相关文章

  1. 【Android UI】自定义带按钮的标题栏

    自定义标题栏在很多的android app中很常见,可以说是一种很有用的UI设计方法.自 己也本着学习的态度,经过一番各种坑,终于实现了,现总结如下: 一:大致流程 1.      对指定的andro ...

  2. Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme

    原文:Android菜鸟的成长笔记(6)--剖析源码学自定义主题Theme 还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上 ...

  3. Android 样式 (style) 和主题(theme)

    转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...

  4. Android样式(style)和主题(theme)

    样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字体颜色.字号.背景色等许多属性. 样式是在与指定布局的 XML 不同的 XML 资源中进行定义. Andro ...

  5. 18 UI美化自定义主题样式代码

    自定义主题 假设我们我们对现有的样式不大满意 那么可在工程目录res/values下的styles.xml自定义 方法: 1. res/values下的styles.xml文件中自定义一个标签 < ...

  6. Android指南 - 样式和主题

    本文翻译自:https://developer.android.com/guide/topics/ui/themes.html Style和theme词汇是专用术语,下文直接使用而不翻译. 样式和主题 ...

  7. 【Android】8.1 主题基本用法

    分类:C#.Android.VS2015: 创建日期:2016-02-17 一.创建本章示例主界面 1.界面截图 2.MainActivity.cs文件中对应的代码 在CreateChItems()方 ...

  8. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  9. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

随机推荐

  1. ArcGIS按字段属性分割文件

    在ArcGIS中我们有时需要将一个文件安字段的属性分割成多个文件,网友总结了几乎所有的方法:http://blog.sina.com.cn/s/blog_4e87fb4c0100fcjh.html , ...

  2. Subversion快速入门教程

    如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配 ...

  3. wepy - 与原生有什么不同($pages,$interceptors)

    wepy内部封装的一些基类,我们要注意以 “$”开头命名,最好不用 关于wepy基类文档,请查看 关于$apply,其实就是主动刷新DOM,来更新数据. 何时使用它? 答. 你为data里面的数据进行 ...

  4. ssh2的application.xml配置文件配置详解

    ssh2的application.xml配置文件配置详解   1.导入其他的配置文件.在ssh项目中可以导入其他的配置文件,导入的格式为: <import resource="clas ...

  5. Android的startActivityForResult不起作用

    之前startActivityForResult一直用的好好的,今天发现怎么也不起作用.检查后发现有两点影响了. 1.android:launchMode="singleTask" ...

  6. jquery 清除style样式

    $("#show").removeAttr("style"); //ie,ff均支持 $("#show").attr("style ...

  7. SIT与UAT的分别

    在企业级软件的测试过程中,经常会划分为三个阶段——单元测试,SIT和UAT,如果开发人员足够,通常还会在SIT之前引入代码审查机制(Code Review)来保证软件符合客户需求且流程正确.下面简单介 ...

  8. 关于NHibernate中存在于Session中实例的3种状态的简单分析

    在使用NHibernate的时候.在Session中会有3种状态. 1. 瞬时状态 (Transient) 由 new 命令开辟内存空间的对象,也就是平时所熟悉的普通对象. 如: Student st ...

  9. 新浪API及调用案例

    百度分享:http://pan.baidu.com/s/1uSmku

  10. highstock K线图 深入研究

    K线图,相信每个股民都不陌生,如何用SVG画好一个K线图是一个难题. 我选择用highstock做为画图组件,适当的修改了一下源码,参考了数个财经网站的案例,完成了一个不太成熟的K线图,欢迎大家批评指 ...