android应用Theme(一)

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

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



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


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



   

最后就是在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(一)_第1张图片     android应用Theme(一)_第2张图片




你可能感兴趣的:(android,android,theme,attrs,styles)