主题功能重构,AESThemeUtil.init函数初始化未设置。

This commit is contained in:
2026-05-28 21:27:13 +08:00
parent bc882c5f80
commit 30fbf4f97e
6 changed files with 197 additions and 292 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Wed May 27 20:22:55 HKT 2026 #Thu May 28 13:25:30 GMT 2026
stageCount=11 stageCount=11
libraryProject=libaes libraryProject=libaes
baseVersion=15.20 baseVersion=15.20
publishVersion=15.20.10 publishVersion=15.20.10
buildCount=0 buildCount=1
baseBetaVersion=15.20.11 baseBetaVersion=15.20.11

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Wed May 27 20:22:45 HKT 2026 #Thu May 28 13:25:30 GMT 2026
stageCount=11 stageCount=11
libraryProject=libaes libraryProject=libaes
baseVersion=15.20 baseVersion=15.20
publishVersion=15.20.10 publishVersion=15.20.10
buildCount=0 buildCount=1
baseBetaVersion=15.20.11 baseBetaVersion=15.20.11

View File

@@ -15,6 +15,7 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@@ -22,8 +23,10 @@ import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import cc.winboll.studio.libaes.DrawerMenuDataAdapter; import cc.winboll.studio.libaes.DrawerMenuDataAdapter;
import cc.winboll.studio.libaes.R; import cc.winboll.studio.libaes.R;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.models.AESThemeBean; import cc.winboll.studio.libaes.models.AESThemeBean;
import cc.winboll.studio.libaes.models.DrawerMenuBean; import cc.winboll.studio.libaes.models.DrawerMenuBean;
import cc.winboll.studio.libaes.utils.AESThemeUtil; import cc.winboll.studio.libaes.utils.AESThemeUtil;
@@ -34,8 +37,8 @@ import cc.winboll.studio.libaes.views.ADsBannerView;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import com.baoyz.widget.PullRefreshLayout; import com.baoyz.widget.PullRefreshLayout;
import java.util.ArrayList; import java.util.ArrayList;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
public abstract class DrawerFragmentActivity extends AppCompatActivity implements IWinBoLLActivity, AdapterView.OnItemClickListener { public abstract class DrawerFragmentActivity extends AppCompatActivity implements IWinBoLLActivity, AdapterView.OnItemClickListener {
@@ -44,7 +47,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME"; static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME";
static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE"; static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE";
//protected Context mContext;
ActivityType mActivityType; ActivityType mActivityType;
ActionBarDrawerToggle mActionBarDrawerToggle; ActionBarDrawerToggle mActionBarDrawerToggle;
DrawerLayout mDrawerLayout; DrawerLayout mDrawerLayout;
@@ -59,13 +61,14 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
public enum ActivityType { Main, Secondary } public enum ActivityType { Main, Secondary }
protected volatile AESThemeBean.ThemeType mThemeType; protected volatile AESThemeBean.ThemeType mThemeType;
protected ArrayList<DrawerMenuBean> malDrawerMenuItem; protected ArrayList<DrawerMenuBean> malDrawerMenuItem;
abstract protected ActivityType initActivityType(); abstract protected ActivityType initActivityType();
//abstract protected View initContentView(LayoutInflater inflater, ViewGroup rootView);
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// 替换:使用工具类统一应用主题
AESThemeUtil.applyAppCompatTheme(this);
mThemeType = AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext())); mThemeType = AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext()));
setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
WinBoLLActivityManager.getInstance().add(this); WinBoLLActivityManager.getInstance().add(this);
mActivityType = initActivityType(); mActivityType = initActivityType();
@@ -78,53 +81,32 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
return this; return this;
} }
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
WinBoLLActivityManager.getInstance().registeRemove(this); WinBoLLActivityManager.getInstance().registeRemove(this);
super.onDestroy(); super.onDestroy();
// 修复:释放广告资源,避免内存泄漏 // 修复:释放广告资源,避免内存泄漏
ADsBannerView adsBannerView = findViewById(R.id.adsbanner); ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
if (adsBannerView != null) { if (adsBannerView != null) {
adsBannerView.releaseAdResources(); adsBannerView.releaseAdResources();
} }
} }
/*@Override
public Intent getIntent() {
// TODO: Implement this method
return super.getIntent();
}
public Context getContext() {
return this.mContext;
}*/
@Override @Override
public MenuInflater getMenuInflater() { public MenuInflater getMenuInflater() {
// TODO: Implement this method
return super.getMenuInflater(); return super.getMenuInflater();
} }
/*public void setSubtitle(CharSequence context) {
// TODO: Implement this method
getSupportActionBar().setSubtitle(context);
}*/
@Override @Override
public void recreate() { public void recreate() {
super.recreate(); super.recreate();
} }
/*@Override
public boolean moveTaskToBack(boolean nonRoot) {
return super.moveTaskToBack(nonRoot);
}*/
@Override @Override
public void startActivity(Intent intent) { public void startActivity(Intent intent) {
super.startActivity(intent); super.startActivity(intent);
@@ -135,26 +117,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
super.startActivityForResult(intent, requestCode, options); super.startActivityForResult(intent, requestCode, options);
} }
/*@Override
public FragmentManager getSupportFragmentManager() {
return super.getSupportFragmentManager();
}
public void setSubtitle(int resId) {
// TODO: Implement this method
getSupportActionBar().setSubtitle(resId);
}
public void setTitle(CharSequence context) {
// TODO: Implement this method
getSupportActionBar().setTitle(context);
}
public void setTitle(int resId) {
// TODO: Implement this method
getSupportActionBar().setTitle(resId);
}*/
@Override @Override
public SharedPreferences getSharedPreferences(String name, int mode) { public SharedPreferences getSharedPreferences(String name, int mode) {
return super.getSharedPreferences(name, mode); return super.getSharedPreferences(name, mode);
@@ -162,7 +124,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
@Override @Override
public Context getApplicationContext() { public Context getApplicationContext() {
// TODO: Implement this method
return super.getApplicationContext(); return super.getApplicationContext();
} }
@@ -173,25 +134,27 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (AESThemeUtil.onAppThemeItemSelected(this, item)) { // 替换为 DrawerFragmentActivity 专属点击处理方法
if (AESThemeUtil.onWinBoLLThemeItemSelected(this, item)) {
recreate(); recreate();
} if (DevelopUtils.onDevelopItemSelected(this, item)) { }
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId())); if (DevelopUtils.onDevelopItemSelected(this, item)) {
} else { LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
return super.onOptionsItemSelected(item); } else {
} return super.onOptionsItemSelected(item);
}
return true; return true;
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
ADsBannerView adsBannerView = findViewById(R.id.adsbanner); ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
if (adsBannerView != null) { if (adsBannerView != null) {
adsBannerView.resumeADs(DrawerFragmentActivity.this); adsBannerView.resumeADs(DrawerFragmentActivity.this);
} }
} }
void initRootView() { void initRootView() {
@@ -213,14 +176,13 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
mPullRefreshLayout = findViewById(R.id.activitydrawerfragmentPullRefreshLayout1); mPullRefreshLayout = findViewById(R.id.activitydrawerfragmentPullRefreshLayout1);
mPullRefreshLayout.setOnRefreshListener(new PullRefreshLayout.OnRefreshListener() { mPullRefreshLayout.setOnRefreshListener(new PullRefreshLayout.OnRefreshListener() {
@Override @Override
public void onRefresh() { public void onRefresh() {
//LogUtils.d(TAG, "onRefresh"); reinitDrawerMenuItemList(malDrawerMenuItem);
reinitDrawerMenuItemList(malDrawerMenuItem); mDrawerMenuDataAdapter.notifyDataSetChanged();
mDrawerMenuDataAdapter.notifyDataSetChanged(); mPullRefreshLayout.setRefreshing(false);
mPullRefreshLayout.setRefreshing(false); }
} });
});
malDrawerMenuItem = new ArrayList<DrawerMenuBean>(); malDrawerMenuItem = new ArrayList<DrawerMenuBean>();
@@ -236,68 +198,51 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.lib_name, R.string.lib_name) { mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.lib_name, R.string.lib_name) {
@Override @Override
public void onDrawerOpened(View drawerView) {//完全打开时触发 public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView); super.onDrawerOpened(drawerView);
mIsDrawerOpened = true; mIsDrawerOpened = true;
mIsDrawerOpening = false; mIsDrawerOpening = false;
//Toast.makeText(MainActivity.this,"onDrawerOpened",Toast.LENGTH_SHORT).show();
} }
@Override @Override
public void onDrawerClosed(View drawerView) {//完全关闭时触发 public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView); super.onDrawerClosed(drawerView);
mIsDrawerOpened = false; mIsDrawerOpened = false;
mIsDrawerClosing = false; mIsDrawerClosing = false;
//Toast.makeText(MainActivity.this,"onDrawerClosed",Toast.LENGTH_SHORT).show();
} }
/**
* 当抽屉被滑动的时候调用此方法
* slideOffset表示 滑动的幅度0-1
*/
@Override @Override
public void onDrawerSlide(View drawerView, float slideOffset) { public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset); super.onDrawerSlide(drawerView, slideOffset);
} }
/**
* 当抽屉滑动状态改变的时候被调用
* 状态值是STATE_IDLE闲置--0, STATE_DRAGGING拖拽的--1, STATE_SETTLING固定--2中之一。
*具体状态可以慢慢调试
*/
@Override @Override
public void onDrawerStateChanged(int newState) { public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState); super.onDrawerStateChanged(newState);
} }
}; };
//设置显示旋转菜单
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//通过下面这句实现toolbar和Drawer的联动如果没有这行代码箭头是不会随着侧滑菜单的开关而变换的或者没有箭头
// 可以尝试一下,不影响正常侧滑
mActionBarDrawerToggle.syncState(); mActionBarDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
//去掉侧滑的默认图标(动画箭头图标),也可以选择不去,
//不去的话把这一行注释掉或者改成true然后把toolbar.setNavigationIcon注释掉就行了
//mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() { mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (mIsDrawerOpened || mIsDrawerOpening) { if (mIsDrawerOpened || mIsDrawerOpening) {
mIsDrawerClosing = true; mIsDrawerClosing = true;
mIsDrawerOpening = false; mIsDrawerOpening = false;
mDrawerLayout.closeDrawer(mPullRefreshLayout); mDrawerLayout.closeDrawer(mPullRefreshLayout);
return; return;
} }
if (!mIsDrawerOpened || mIsDrawerClosing) { if (!mIsDrawerOpened || mIsDrawerClosing) {
mIsDrawerOpening = true; mIsDrawerOpening = true;
mIsDrawerClosing = false; mIsDrawerClosing = false;
mDrawerLayout.openDrawer(mPullRefreshLayout); mDrawerLayout.openDrawer(mPullRefreshLayout);
return; return;
} }
} }
}); });
initDrawerMenuItemList(malDrawerMenuItem); initDrawerMenuItemList(malDrawerMenuItem);
} }
@@ -305,12 +250,11 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
void initSecondaryRootView() { void initSecondaryRootView() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() { mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
//LogUtils.d(TAG, "onClick " + Integer.toString(v.getId())); finish();
finish(); }
} });
});
} }
public <T extends Fragment> int removeFragment(T fragment) { public <T extends Fragment> int removeFragment(T fragment) {
@@ -375,13 +319,13 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
if (mActivityType == ActivityType.Main) { if (mActivityType == ActivityType.Main) {
// 主题菜单 // 替换为兼容版菜单加载方法
AESThemeUtil.inflateMenu(this, menu); AESThemeUtil.inflateCompatThemeMenu(this, menu);
// 调试工具菜单 // 调试工具菜单
if (GlobalApplication.isDebugging()) { if (GlobalApplication.isDebugging()) {
DevelopUtils.inflateMenu(this, menu); DevelopUtils.inflateMenu(this, menu);
} }
// 应用信息菜单 // 应用信息菜单
getMenuInflater().inflate(R.menu.toolbar_drawerbase, menu); getMenuInflater().inflate(R.menu.toolbar_drawerbase, menu);
} }
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
@@ -392,3 +336,4 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
super.onActivityResult(who, targetFragment, requestCode); super.onActivityResult(who, targetFragment, requestCode);
} }
} }

View File

@@ -12,7 +12,6 @@ import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libaes.R; import cc.winboll.studio.libaes.R;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.utils.AESThemeUtil; import cc.winboll.studio.libaes.utils.AESThemeUtil;
import cc.winboll.studio.libaes.views.ASupportToolbar;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
public class TestASupportToolbarActivity extends AppCompatActivity implements IWinBoLLActivity { public class TestASupportToolbarActivity extends AppCompatActivity implements IWinBoLLActivity {
@@ -28,11 +27,12 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW
public String getTag() { public String getTag() {
return TAG; return TAG;
} }
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
LogUtils.d(TAG, "onCreate() start"); LogUtils.d(TAG, "onCreate() start");
AESThemeUtil.applyAppTheme(this); // 替换此处:原 applyAppTheme -> 新方法 applyAppCompatTheme
AESThemeUtil.applyAppCompatTheme(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testasupporttoolbar); setContentView(R.layout.activity_testasupporttoolbar);
LogUtils.d(TAG, "setContentView() done"); LogUtils.d(TAG, "setContentView() done");
@@ -45,3 +45,4 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW
LogUtils.d(TAG, "onCreate() end"); LogUtils.d(TAG, "onCreate() end");
} }
} }

View File

@@ -14,10 +14,11 @@ import cc.winboll.studio.libaes.utils.AESThemeUtil;
public class TestAToolbarActivity extends Activity { public class TestAToolbarActivity extends Activity {
public static final String TAG = "TestAToolbarActivity"; public static final String TAG = "TestAToolbarActivity";
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
AESThemeUtil.applyAppTheme(this); // 原生Activity 使用 applyTheme
AESThemeUtil.applyTheme(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testatoolbar); setContentView(R.layout.activity_testatoolbar);
Toolbar toolbar = findViewById(R.id.activitytestatoolbarAToolbar1); Toolbar toolbar = findViewById(R.id.activitytestatoolbarAToolbar1);
@@ -26,3 +27,4 @@ public class TestAToolbarActivity extends Activity {
} }
} }

View File

@@ -9,203 +9,160 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.libaes.R; import cc.winboll.studio.libaes.R;
import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity;
import cc.winboll.studio.libaes.models.AESThemeBean; import cc.winboll.studio.libaes.models.AESThemeBean;
import java.util.ArrayList;
public class AESThemeUtil { public class AESThemeUtil {
public static final String TAG = "AESThemeUtil"; public static final String TAG = "AESThemeUtil";
private static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME";
private static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE";
static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME"; // 私有静态集合,外部不可直接修改
static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE"; private static ArrayList<Integer> themeStyleIDList = new ArrayList<>();
protected volatile AESThemeBean.ThemeType mThemeType; // 移除无用实例成员 mThemeType工具类不保留实例字段
public static <T extends Context> int getThemeTypeID(T context) { /**
AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class); * 初始化主题样式ID集合
return bean == null ? AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES): bean.getCurrentThemeTypeID(); */
public static void init(ArrayList<Integer> themeStyleIDList) {
AESThemeUtil.themeStyleIDList = themeStyleIDList;
} }
public static <T extends Context> void saveThemeStyleID(T context, int nThemeTypeID) { /**
AESThemeBean bean = new AESThemeBean(nThemeTypeID); * 获取当前主题样式ID
*/
public static int getThemeTypeID(Context context) {
AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class);
return bean == null ? getThemeStyleID(AESThemeBean.ThemeType.AES) : bean.getCurrentThemeTypeID();
}
/**
* 保存主题样式ID
*/
public static void saveThemeStyleID(Context context, int themeTypeID) {
AESThemeBean bean = new AESThemeBean(themeTypeID);
AESThemeBean.saveBean(context, bean); AESThemeBean.saveBean(context, bean);
} }
public static <T extends Activity> void applyAppTheme(T activity) { // ====================== 应用主题 - 规范重载 ======================
/**
* 应用当前持久化主题(通用 Activity
*/
public static void applyTheme(Activity activity) {
activity.setTheme(getThemeTypeID(activity)); activity.setTheme(getThemeTypeID(activity));
} }
public static <T extends AppCompatActivity> void applyAppCompatTheme(T activity) { /**
* 应用指定主题(通用 Activity
*/
public static void applyTheme(Activity activity, AESThemeBean.ThemeType themeType) {
activity.setTheme(getThemeStyleID(themeType));
}
/**
* 应用当前持久化主题AppCompat 兼容 Activity
*/
public static void applyAppCompatTheme(AppCompatActivity activity) {
activity.setTheme(getThemeTypeID(activity)); activity.setTheme(getThemeTypeID(activity));
} }
/*public static <T extends WinBoLLActivity> void applyWinBoLLTheme(T activity) { /**
activity.setTheme(getThemeTypeID(activity.getApplicationContext())); * 应用指定主题AppCompat 兼容 Activity
}*/ */
public static void applyAppCompatTheme(AppCompatActivity activity, AESThemeBean.ThemeType themeType) {
public static <T extends Activity> void applyAppTheme(Activity activity, AESThemeBean.ThemeType themeType) { activity.setTheme(getThemeStyleID(themeType));
activity.setTheme(AESThemeBean.getThemeStyleID(themeType));
} }
public static <T extends AppCompatActivity> void applyAppCompatTheme(Activity activity, AESThemeBean.ThemeType themeType) { // ====================== 加载菜单 ======================
activity.setTheme(AESThemeBean.getThemeStyleID(themeType)); /**
} * 加载主题菜单(通用 Activity
*/
/*public static <T extends WinBoLLActivity> void applyWinBoLLTheme(Activity activity, AESThemeBean.ThemeType themeType) { public static void inflateThemeMenu(Activity activity, Menu menu) {
activity.setTheme(AESThemeBean.getThemeStyleID(themeType));
}*/
public static <T extends Activity> void inflateMenu(T activity, Menu menu) {
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu);
} }
public static <T extends AppCompatActivity> void inflateCompatMenu(T activity, Menu menu) { /**
* 加载主题菜单AppCompat Activity
*/
public static void inflateCompatThemeMenu(AppCompatActivity activity, Menu menu) {
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu);
} }
/*public static <T extends WinBoLLActivity> void inflateWinBoLLMenu(T activity, Menu menu) { // ====================== 菜单点击统一核心逻辑(消除重复代码) ======================
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); /**
}*/ * 主题菜单项点击统一处理
* @param context 上下文(用于持久化)
public static <T extends Activity> boolean onAppThemeItemSelected(T activity, MenuItem item) { * @param item 点击的菜单项
int nThemeStyleID; * @return 是否消费点击事件
if (R.id.item_depththeme == item.getItemId()) { */
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH); public static boolean handleThemeMenuClick(Context context, MenuItem item) {
saveThemeStyleID(activity, nThemeStyleID); int themeStyleId;
return true; int itemId = item.getItemId();
} else if (R.id.item_skytheme == item.getItemId()) { if (R.id.item_depththeme == itemId) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY); themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
saveThemeStyleID(activity, nThemeStyleID); } else if (R.id.item_skytheme == itemId) {
return true; themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.SKY);
} else if (R.id.item_goldentheme == item.getItemId()) { } else if (R.id.item_goldentheme == itemId) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN); themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
saveThemeStyleID(activity, nThemeStyleID); } else if (R.id.item_bearingtheme == itemId) {
return true; themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.BEARING);
} else if (R.id.item_bearingtheme == item.getItemId()) { } else if (R.id.item_memortheme == itemId) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING); themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
saveThemeStyleID(activity, nThemeStyleID); } else if (R.id.item_taotheme == itemId) {
return true; themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.TAO);
} else if (R.id.item_memortheme == item.getItemId()) { } else if (R.id.item_defaulttheme == itemId) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR); themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.AES);
saveThemeStyleID(activity, nThemeStyleID); } else {
return true; return false;
} else if (R.id.item_taotheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_defaulttheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} }
saveThemeStyleID(context, themeStyleId);
return false; return true;
} }
public static <T extends AppCompatActivity> boolean onAppCompatThemeItemSelected(T activity, MenuItem item) { // 对外暴露不同 Activity 类型的入口,内部调用统一核心方法
int nThemeStyleID; public static boolean onThemeItemSelected(Activity activity, MenuItem item) {
if (R.id.item_depththeme == item.getItemId()) { return handleThemeMenuClick(activity, item);
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_skytheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_goldentheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_bearingtheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_memortheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_taotheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
saveThemeStyleID(activity, nThemeStyleID);
return true;
} else if (R.id.item_defaulttheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
saveThemeStyleID(activity, nThemeStyleID);
return true;
}
return false;
} }
public static <T extends AppCompatActivity> boolean onWinBoLLThemeItemSelected(T activity, MenuItem item) { public static boolean onAppCompatThemeItemSelected(AppCompatActivity activity, MenuItem item) {
int nThemeStyleID; return handleThemeMenuClick(activity, item);
if (R.id.item_depththeme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_skytheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_goldentheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_bearingtheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_memortheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_taotheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_defaulttheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
}
return false;
} }
public static <T extends DrawerFragmentActivity> boolean onWinBoLLThemeItemSelected(T activity, MenuItem item) { public static boolean onWinBoLLThemeItemSelected(AppCompatActivity activity, MenuItem item) {
int nThemeStyleID; // 使用 Application 上下文保存,避免 Activity 泄漏
if (R.id.item_depththeme == item.getItemId()) { return handleThemeMenuClick(activity.getApplicationContext(), item);
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH); }
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_skytheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_goldentheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_bearingtheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_memortheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_taotheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
} else if (R.id.item_defaulttheme == item.getItemId()) {
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
return true;
}
return false; public static boolean onWinBoLLThemeItemSelected(DrawerFragmentActivity activity, MenuItem item) {
return handleThemeMenuClick(activity.getApplicationContext(), item);
}
// ====================== 主题类型转换工具 ======================
/**
* 根据枚举获取对应样式ID
*/
public static int getThemeStyleID(AESThemeBean.ThemeType themeType) {
return themeStyleIDList.get(themeType.ordinal());
}
/**
* 根据样式ID反向获取主题枚举
*/
public static AESThemeBean.ThemeType getThemeStyleType(int themeStyleID) {
for (int i = 0; i < themeStyleIDList.size(); i++) {
if (themeStyleIDList.get(i) == themeStyleID) {
return AESThemeBean.ThemeType.values()[i];
}
}
return AESThemeBean.ThemeType.values()[0];
} }
} }