分类:C#、Android、VS2015;

创建日期:2016-02-17

一、简介

除了通过Theme指定主题外,还可以在程序运行时动态指定并应用主题。

二、示例—ch0802ThemeDemo

1、运行截图

下面左图:活动条(ActionBar)也是浅色的;右图:没有活动条

 

下面左图:全屏不带活动条;右图:带活动条的黑色主题

 

下面左图:不带活动条的黑色主题;右图:带墙纸的材料主题

 

2、相关代码

(1)ch0802_ThemeDemo.axml文件

在Resources/layout文件夹下添加该文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="提示:单击主题可立即看到当前页面的应用效果"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView1"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:textSize="14dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="5dp" />
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView1"
android:listSelector="@color/myGreen"
android:choiceMode="singleChoice" />
</LinearLayout>

(2)ch0802ThemeDemo.cs文件

在SrcDemos文件夹下添加该文件。

using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Widget;
namespace MyDemos.SrcDemos
{
[Activity(Label = "【例8-2】动态选择和设置主题")]
public class ch0802ThemeDemo2 : Activity
{
private int slectedThemeId;
protected override void OnCreate(Bundle savedInstanceState)
{
if (savedInstanceState != null)
{
SetTheme(savedInstanceState.GetInt("theme_id"));
}
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch0802_ThemeDemo2); //这里仅列出一部分Android内置的主题,其它的自己试吧
List<int> themesId = new List<int>() {
Android.Resource.Style.ThemeDeviceDefaultLightDarkActionBar,
Android.Resource.Style.ThemeDeviceDefaultLight,
Android.Resource.Style.ThemeDeviceDefaultLightNoActionBar,
Android.Resource.Style.ThemeDeviceDefaultLightNoActionBarFullscreen, Android.Resource.Style.ThemeDeviceDefault,
Android.Resource.Style.ThemeDeviceDefaultNoActionBar, Android.Resource.Style.ThemeMaterialWallpaper,
};
List<string> themesName = new List<string>();
foreach (var v in themesId)
{
themesName.Add(Theme.Resources.GetResourceEntryName(v));
}
var listView1 = FindViewById<ListView>(Resource.Id.listView1);
listView1.Adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItemSingleChoice, themesName.ToArray());
//让字号小一些,以便能一行显示一个主题
listView1.ChildViewAdded += (s, e) =>
{
((TextView)e.Child).TextSize = 12;
};
//演示如何设置默认选项
listView1.SetItemChecked(0, true);
//单击某个主题项引发的事件
listView1.ItemClick += (s, e) =>
{
slectedThemeId = themesId[e.Position];
//重新创建该页,此方法会自动调用OnSaveInstanceState方法
Recreate();
};
} protected override void OnSaveInstanceState(Bundle outState)
{
//将当前所选的主题传递给新实例
outState.PutInt("theme_id", slectedThemeId);
base.OnSaveInstanceState(outState);
}
}
}

【Android】8.2 动态选择和设置主题的更多相关文章

  1. [转]Android逆向之动态调试总结

    一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...

  2. android中listview的一些样式设置

    在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android: ...

  3. Android 6.0 动态权限申请注意事项

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 And ...

  4. Android 6.0动态权限(转)

    转自:http://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 Android 6.0 为了保护用户隐私,将一些权限的申 ...

  5. Android Studio 一些方便使用的设置

    相信非常多使用Eclipse的朋友,開始用Android Studio都是认为不是特别方便, a:比方怎样使鼠标放到方法上面,就有提示用法; b:怎样设置字体大小,和背景色; c:还有怎么查看Outl ...

  6. Android开发模版代码(4)——状态栏设置

    下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖 compile 'com.readystatesoftware.systembartint:systembartint:1.0. ...

  7. Android 6.0 - 动态权限管理的解决方案(转)

    转自:http://www.cnblogs.com/dubo-/p/6018262.html Android 6.0 - 动态权限管理的解决方案   转载请标注 Android 6.0版本(Api 2 ...

  8. Android教程 -08 ToolBar的使用和主题的介绍

    ActionBar 简介 视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 讲解ToolBar之前首先需要了解 ActionBar, 两者使用起来基本上一致. Android 3 ...

  9. Android WebView 实现文件选择、拍照、录制视频、录音

    原文地址:Android WebView 实现文件选择.拍照.录制视频.录音 | Stars-One的杂货小窝 Android中的WebView如果不进行相应的设置,H5页面的上传按钮是无法触发And ...

随机推荐

  1. Nginx负载均衡简易方法

    做个简单的测试,一个Nginx, 通过FastCGI协议和另外两台服务器上的基于CppCMS开发的web server通信.配置方法很简单: 首先,必须在nginx.conf文件开头,server 配 ...

  2. Hadoop内部的限流机制

    前言 文章标题一開始提及到了一个令人感到有些抽象又显得有些非常"大"的词,限流.事实上这个词语在非常多行业都能够用到,比方近期春运,各大主要城市,火车站,地铁站都要做到限流吧,避免 ...

  3. oracle卸载清除注册表(彻底卸载)

    用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢? 那就是直接注册表清除,步骤如下: . 开始->设置->控制面板-& ...

  4. java Socket Tcp 浏览器和服务器(一)

    自定义服务端,使用已有的客户端IE,了解一下客户端给服务端发了什么请求? 发送的请求是: GET / HTTP/1.1  请求行  请求方式  /myweb/1.html  请求的资源路径   htt ...

  5. Tomcat 监控方法

    Tomcat 监控方法 方法1:.使用tomcat自带的status页 具体方法: 步骤1:修改%tomcat安装路径%\conf \tomcat-users文件,配置admin设置权限.在<t ...

  6. 查看Windows端口及端口关闭方法(转)

    摘自:http://www.hackbase.com/tech/2011-05-17/63766.html 查看Windows端口及端口关闭方法 一.查看已开放的端口: 1.借助系统自带MS-DOS命 ...

  7. beanUtils的用法

    举例1:使用BeanUtils工具封装用户提交的数据. public static void main(String[] args)throws Exception { // 模拟用户的输入的数据如下 ...

  8. [转载]linux 文件改名,移动

    原文地址:linux 文件改名,移动作者:我的足迹 文件改名命令mv(DOS下为REN或rename),在linux中用mv命令给文件改名,例:     mv /mntfloppy p相当于 ren ...

  9. 利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码

    最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中. 在JAVA程序中,有个HTTP请求数据头中,包含一个BASE64编码的字符串,例如: eJyVjMENgDAMA1fp ...

  10. codeforces#254DIV2解题报告

    今天简直大爆发啊... 吃了顿烧烤竟然这么管事. . . .. 本弱渣竟然做出来了3道,并且B题是我第一次在CF中用到算法..(曾经最多也就是贪心. . . ). 题目地址:codeforces#22 ...