这一节来说一下常见Android主题色设置,主要是利用Android开源的类库,结合EventBus的使用。先来看一下效果图吧,如下:
(1)
(2)具体操作如下:
(2.1)在App目录下的build.gradle中导入:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support:support-v4:25.3.0'
compile 'com.android.support:design:25.3.0'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.afollestad.material-dialogs:core:0.9.1.0'
compile 'com.afollestad.material-dialogs:commons:0.9.1.0'
testCompile 'junit:junit:4.12'
}
(2.2)
设置界面SettingActivity代码如下:public class SettingActivity extends BaseActivity implements
ColorChooserDialog.ColorCallback{
protected Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
initToolBar();
}
private void initToolBar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
protected int getLayoutId() {
return R.layout.activity_setting;
}
@Override
protected int getMenuId() {
return 0;
}
@Override
protected void initViews(Bundle savedInstanceState) {
setDisplayHomeAsUpEnabled(true);
}
@Override
protected void loadData() {
getFragmentManager().beginTransaction().replace(R.id.contentLayout, new SettingFragment()).commit();
}
@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
if (selectedColor == ThemeUtil.getThemeColor(this, R.attr.colorPrimary))
return;
toolbar.setBackgroundColor(selectedColor);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(selectedColor);
}
if (selectedColor == getResources().getColor(R.color.lapis_blue)) {
setTheme(R.style.LapisBlueTheme);
ThemeSetting.setTheme(0);
} else if (selectedColor == getResources().getColor(R.color.pale_dogwood)) {
setTheme(R.style.PaleDogwoodTheme);
ThemeSetting.setTheme(1);
} else if (selectedColor == getResources().getColor(R.color.greenery)) {
setTheme(R.style.GreeneryTheme);
ThemeSetting.setTheme(2);
} else if (selectedColor == getResources().getColor(R.color.primrose_yellow)) {
setTheme(R.style.PrimroseYellowTheme);
ThemeSetting.setTheme(3);
} else if (selectedColor == getResources().getColor(R.color.flame)) {
setTheme(R.style.FlameTheme);
ThemeSetting.setTheme(4);
} else if (selectedColor == getResources().getColor(R.color.island_paradise)) {
setTheme(R.style.IslandParadiseTheme);
ThemeSetting.setTheme(5);
} else if (selectedColor == getResources().getColor(R.color.kale)) {
setTheme(R.style.KaleTheme);
ThemeSetting.setTheme(6);
} else if (selectedColor == getResources().getColor(R.color.pink_yarrow)) {
setTheme(R.style.PinkYarrowTheme);
ThemeSetting.setTheme(7);
} else if (selectedColor == getResources().getColor(R.color.niagara)) {
setTheme(R.style.NiagaraTheme);
ThemeSetting.setTheme(8);
}
getFragmentManager().beginTransaction().replace(R.id.contentLayout, new SettingFragment()).commit();
EventBus.getDefault().post(new ThemeChangedEvent(selectedColor));
}
}
(2.3)MainActivity中的主要代码:
public class MainActivity extends BaseActivity {
private Button btn;
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected int getMenuId() {
return 0;
}
@Override
protected void initViews(Bundle savedInstanceState) {
btn = (Button) findViewById(R.id.btn_main);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SettingActivity.class));
}
});
}
@Override
protected void loadData() {
}
//EventBus事件接收
@Subscribe(threadMode = ThreadMode.MAIN)
public void onThemeChanged(ThemeChangedEvent event) {
this.recreate();
}
@Override
protected void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
protected void setDisplayHomeAsUpEnabled(boolean enable) {
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(enable);
}
@Override
protected void onDestroy() {
if (EventBus.getDefault().isRegistered(this))
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
完整代码链接:http://download.csdn.net/detail/ljt2724960661/9790211