现在一个项目中随处可见Android5.0的足迹,尤其是Material的设计部分,相当漂亮,小白正解开启了5.0的学习,不足之处,请各位大神指点,谢谢!
这是一个更换主题的小demo,点击按钮时候,可切换至不同的主题(开发工具为AS),直接看代码:
xml的布局代码就不贴了,因为直接是俩个Button,
1 23 4 14 15 25 26 36
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 @Override15 protected void onCreate(Bundle savedInstanceState) {16 super.onCreate(savedInstanceState);17 initView();18 }19 20 /**21 * 初始化界面22 */23 protected void initView(){24 //去掉ActionBar25 //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 @Override38 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就可。
代码托管: