android应用Theme(一)

android切换Theme主流三种方式来切换Theme,第一种是通过内置的style来切换,一般用于夜间模式/日间模式切换。第二种是通过apk来实现插件化,第三种是通过下载zip进行解压到到相应的app文件下,应用讲需要文件读取到内存中。这篇是介绍第一种android切换Theme的方法。

首先当然是在values下面创建attrs文件,然后定义了一些attr。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="main">
      <attr name="bgColor" format="color"></attr>
      <attr name="buttonBgColor" format="color"></attr>
       <attr name="buttonTextColor" format="color"></attr>
      <attr name="textSize" format="dimension"></attr>
      </declare-styleable>
  </resources>

然后再在styles文件定义两个style。

<style name="dayTheme">
        <item name="bgColor">#ffffff</item>
        <item name="buttonBgColor">#80000000</item>
        <item name="buttonTextColor">#80ffffff</item>
        <item name="textSize">14sp</item>
    </style>
    
      <style name="nightTheme">
        <item name="bgColor">#cc000000</item>
        <item name="buttonBgColor">#80ffffff</item>
          <item name="buttonTextColor">#80000000</item>
        <item name="textSize">14sp</item>
    </style>

然后就是在布局文件中使用attrs。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/bgColor"
    >

   <Button
       android:id="@+id/swtichThemeBtn"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="?attr/textSize"
       android:text="按下按钮切换夜间模式"
       android:layout_margin="10dip"
       android:background="?attr/buttonBgColor"
       android:textColor="?attr/buttonTextColor"
       />

</LinearLayout>

最后就是在mainActivity设置theme并动态切换theme。

import android.os.Bundle;
import android.preference.PreferenceManager;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private Button mSwtichThemeBtn;
	private boolean isNight;
	private SharedPreferences sp;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		sp = PreferenceManager.getDefaultSharedPreferences(this);
		setTheme((isNight = sp.getBoolean("isNight", false)) ? R.style.nightTheme : R.style.dayTheme);
		setContentView(R.layout.activity_main);
		mSwtichThemeBtn = (Button) this.findViewById(R.id.swtichThemeBtn);
		mSwtichThemeBtn.setText(isNight?"切换日间模式":"切换夜间模式");
		mSwtichThemeBtn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Editor edit = sp.edit();
				edit.putBoolean("isNight", !isNight);
				edit.commit();
				recreateForTheme();
			}
		});
	}
	@SuppressLint("NewApi")
	public void recreateForTheme(){

		if(android.os.Build.VERSION.SDK_INT >= 11){
			this.recreate();
		}else{
			this.finish();
			startActivity(new Intent(MainActivity.this,MainActivity.class));
		}
	}

    

android应用Theme(一),布布扣,bubuko.com

时间: 2024-10-19 11:28:46

android应用Theme(一)的相关文章

Android 主题theme说明 摘记

主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类: [html] view plain copy print? •android:theme="@android:style/Theme.Dialog"   将一个Activity显示为能话框模式 •android:theme="@android:style/T

Android中theme.xml与style.xml的区别

一.相同点 两者的定义相同.继承方式也相同 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- 继承方式 1.parent 通过parent属性用来继承Android已经定义好的style 比如:parent="android:Theme.Dialog" 或 parent="@android:style/Theme.Dialog" 2.继

Android 中Theme的设置

在 style.xml 中注册自己的theme <style name="Mytext"> <item name="android:textSize">18sp</item> <item name="android:textColor">#ff99</item> </style> 在别的文件中引用 <ListView android:layout_width="

android 中theme.xml与style.xml的区别

from://http://liangoogle.iteye.com/blog/1848448 android 中theme.xml与style.xml的区别: 相同点: 两者的定义相同. <resources> <stylename="theme"parent="android:Theme.Black"> <itemname="android:windowNoTitle">true< /item>

android应用Theme(二)

第二种实现android应用Theme的方式是通过apk来实现的.下面是一个demo. 1.首先必须新建一个apk,类似的插件,然后在该apk的AndroidManifest.xml文件的application加上一个meta-data.这个是下一步查找是否是自己的插件的apk做一个标记. <meta-data android:name="skin_demo2_plugin" android:value="com.example.skindemo2.icon"

android 中theme样式的解释

android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式 android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏 android:theme="Theme

【转】android 常用theme

android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏android:theme="@android

解决android:theme=&quot;@android:style/Theme.NoDisplay&quot; 加入这句话后程序不能运行

原因: 原来用的是ActionBarActivity,继承自 ActionBarActivity的类必须指定固定的集中Theme风格,而这些 Theme 风格是需要导入V7中的 appcompat LIB库工程,编译后再引用才能引用使用. 解决1: 将E:\android\adt-bundle-windows-x86-20131030\sdk\extras\android\support\v7\appcompat这个导入Eclipse中去.然后让你的工程添加这个lib,然后不能再用@androi

解决安卓manifest中的application标签中@android:style/Theme.NoTitleBar崩溃的问题

在安卓的activity创建的时候一般会有台头就是label首先是如何去掉的问题. 例如红色框框中的这个就是自带的label. 有两种方法: 一在mainfest的application标签中添加android:theme"@android:style/Theme.NoTitleBar".这是第一个. 二就是在每一个.java文件的oncreate的开头添加 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 这两个都可以同时去掉.