现在一个项目中随处可见Android5.0的足迹,尤其是Material的设计部分,相当漂亮,小白正解开启了5.0的学习,不足之处,请各位大神指点,谢谢!
这是一个更换主题的小demo,点击按钮时候,可切换至不同的主题(开发工具为AS),直接看代码:
xml的布局代码就不贴了,因为直接是俩个Button,
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 4 <style name="AppTheme" parent="android:Theme.Material.Light"> 5 <!--应用的主要色调--> 6 <item name="android:colorPrimaryDark">#ff3367d5</item> 7 <!--actionBar主题色--> 8 <item name="android:colorPrimary">#ff4284f3</item> 9 <!--窗口背景颜色--> 10 <item name="android:windowBackground">@color/windowbg</item> 11 <!--底部导航栏颜色--> 12 <item name="android:navigationBarColor">#ff030303</item> 13 </style> 14 <!--红色主题--> 15 <style name="AppTheme_Red" parent="android:Theme.Material.Light"> 16 <!--应用的主色调--> 17 <item name="android:colorPrimaryDark">@color/Red_colorPrimaryDark</item> 18 <!--actionBar颜色--> 19 <item name="android:colorPrimary">@color/Red_colorPrimary</item> 20 <!--窗口背景颜色--> 21 <item name="android:windowBackground">@color/Red_windowBackground</item> 22 <!--底部导航栏--> 23 <item name="android:navigationBarColor">@color/Red_navigationBarColor</item> 24 </style> 25 <!--紫色主题--> 26 <style name="AppTheme_Pink" parent="android:Theme.Material.Light"> 27 <!--应用的主色调--> 28 <item name="android:colorPrimaryDark">@color/pink_colorPrimaryDark</item> 29 <!--actionBar颜色--> 30 <item name="android:colorPrimary">@color/pink_colorPrimary</item> 31 <!--窗口背景颜色--> 32 <item name="android:windowBackground">@color/pink_windowBackground</item> 33 <!--底部导航栏--> 34 <item name="android:navigationBarColor">@color/pink_navigationBarColor</item> 35 </style> 36 </resources>
MainActivity.java
1 package com.samsarah.theme5; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 9 public class MainActivity extends Activity implements View.OnClickListener { 10 11 private Button btn_red; 12 private Button btn_pink; 13 private Intent intent; 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 initView(); 18 } 19 20 /** 21 * 初始化界面 22 */ 23 protected void initView(){ 24 //去掉ActionBar 25 //requestWindowFeature(Window.FEATURE_NO_TITLE); 26 int themeId = getIntent().getIntExtra("themeId",-1); 27 if (themeId != -1){ 28 setTheme(themeId); 29 } 30 setContentView(R.layout.activity_main); 31 btn_red = (Button) findViewById(R.id.btn_red); 32 btn_pink = (Button) findViewById(R.id.btn_pink); 33 btn_red.setOnClickListener(this); 34 btn_pink.setOnClickListener(this); 35 } 36 37 @Override 38 public void onClick(View view) { 39 40 switch (view.getId()){ 41 case R.id.btn_red: 42 finish(); 43 overridePendingTransition(0,0); 44 //因为调用setTheme的时候,会提示必须在setContentView之间,但是第一次就自相矛盾,所以finish()掉之后重启就ok了 45 intent = new Intent(MainActivity.this,MainActivity.class); 46 //告知系统需要更换的主题 47 intent.putExtra("themeId",R.style.AppTheme_Red); 48 //重启 49 startActivity(intent); 50 //点击按钮更换主题样式 51 // setTheme(R.style.AppTheme_Red); 52 break; 53 case R.id.btn_pink: 54 finish(); 55 overridePendingTransition(0,0); 56 intent = new Intent(MainActivity.this,MainActivity.class); 57 intent.putExtra("themeId", R.style.AppTheme_Pink); 58 startActivity(intent); 59 // setTheme(R.style.AppTheme_Pink); 60 break; 61 default: 62 break; 63 } 64 } 65 }
注意:在开始一个新的主题时候,IDE会提示必须在seiContentView之前,但是初次的话,肯定不可能,自相矛盾,所以finish之后,重启即可,另外切换主题使用setTheme就可。