分析Android App中内置换肤功能的实现方式

2019-12-10 18:58:36于丽

布局文件:
main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://www.easck.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:orientation="vertical" > 
 
 <TextView 
  android:textColor="#ff00ff" 
  android:text="程序皮肤更换" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" /> 
<RadioGroup 
  android:id="@+id/skin_options" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
   > 
 
  <RadioButton 
   android:layout_weight="1" 
   android:id="@+id/radioButton1" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:text="风格1" /> 
 
  <RadioButton 
   android:layout_weight="1" 
   android:id="@+id/radioButton2" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:text="风格2" /> 
 
  <RadioButton 
   android:layout_weight="1" 
   android:id="@+id/radioButton3" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:text="风格3" /> 
 
  <RadioButton 
   android:layout_weight="1" 
   android:id="@+id/radioButton4" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:text="风格4" /> 
 
  <RadioButton 
   android:layout_weight="1" 
   android:id="@+id/radioButton5" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:text="风格5" /> 
 </RadioGroup> 
 
</LinearLayout> 

程序主Activity

package com.tony.skindemo; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
 
public class SkinDemoActivity extends Activity { 
 
 private SkinSettingManager mSettingManager; 
 private RadioButton radioButton1; 
 private RadioButton radioButton2; 
 private RadioButton radioButton3; 
 private RadioButton radioButton4; 
 private RadioButton radioButton5; 
 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
 
  // 取消标题栏 
  requestWindowFeature(Window.FEATURE_NO_TITLE); 
  // 完成窗体的全屏显示 // 取消掉状态栏 
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 
  setContentView(R.layout.main); 
  // 初始化皮肤 
  mSettingManager = new SkinSettingManager(this); 
  mSettingManager.initSkins(); 
 
  //通过单选按钮设置皮肤(可自定义更换的方式,如导航栏,也可以加上预览功能,此处不再实现) 
  radioButton1 = (RadioButton) findViewById(R.id.radioButton1); 
  radioButton2 = (RadioButton) findViewById(R.id.radioButton2); 
  radioButton3 = (RadioButton) findViewById(R.id.radioButton3); 
  radioButton4 = (RadioButton) findViewById(R.id.radioButton4); 
  radioButton5 = (RadioButton) findViewById(R.id.radioButton5); 
  RadioGroup radioGroup = (RadioGroup) findViewById(R.id.skin_options); 
  radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
 
   @Override 
   public void onCheckedChanged(RadioGroup group, int checkedId) { 
 
    switch (checkedId) { 
    case R.id.radioButton1: 
     mSettingManager.changeSkin(1); 
     break; 
 
    case R.id.radioButton2: 
     mSettingManager.changeSkin(2); 
     break; 
    case R.id.radioButton3: 
     mSettingManager.changeSkin(3); 
     break; 
    case R.id.radioButton4: 
     mSettingManager.changeSkin(4); 
     break; 
    case R.id.radioButton5: 
     mSettingManager.changeSkin(5); 
     break; 
    default: 
     break; 
    } 
   } 
  }); 
 } 
 
 // 这里为了简单实现,实现换肤 
 public boolean onTouchEvent(MotionEvent event) { 
  mSettingManager.toggleSkins(); 
  return super.onTouchEvent(event); 
 } 
 
 
}