Skip to content

Commit c0415ba

Browse files
committed
添加对5.x和2.x系统主题的支持
Signed-off-by: Cai Liming <405977146@163.com>
1 parent 3a20b3d commit c0415ba

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

PluginCore/src/com/plugin/core/PluginCompat.java

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,44 @@
22

33
import android.content.Context;
44
import android.os.Build;
5+
import android.util.Log;
56

67
public class PluginCompat {
78

89
/**
910
*
1011
* @param pluginContext
11-
* @param resId 宿主程序中定义的主题资源ID
12+
* @param resId 主题资源ID
1213
* @param clazz
1314
*/
14-
public static void applyHostTheme(Context pluginContext, int resId, @SuppressWarnings("rawtypes") Class clazz) {
15-
//使用主程序资源Id不需要区分版本
16-
pluginContext.setTheme(resId);
17-
}
18-
19-
/**
20-
*
21-
* @param pluginContext
22-
* @param resId 插件程序中定义的主题资源ID
23-
* @param clazz
24-
*/
25-
public static void applyPluginTheme(Context pluginContext, int resId, @SuppressWarnings("rawtypes") Class clazz) {
26-
//使用插件程序主题资源Id的时候需要区分版本
27-
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT <= 20) {
15+
public static void setTheme(Context pluginContext, int resId, @SuppressWarnings("rawtypes") Class clazz) {
16+
17+
boolean isThemeInHostResouce = false;
18+
try {
19+
String themeEntryName = PluginLoader.getApplicatoin().getResources().getResourceEntryName(resId);
20+
Log.v("PluginCompat", "" +themeEntryName);
21+
22+
//“main_style_”是在pluglic.xml文件中定义的!
23+
if (themeEntryName != null && !themeEntryName.startsWith("main_style_")) {
24+
isThemeInHostResouce = true;
25+
}
26+
} catch (Exception e) {
27+
}
28+
29+
if (isThemeInHostResouce) {
30+
//使用主程序资源Id不需要区分版本
2831
pluginContext.setTheme(resId);
2932
} else {
30-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByClassName(clazz.getName());
31-
((PluginContextTheme)pluginContext).mResources = PluginCreator.createPluginResourceFor5(PluginLoader.getApplicatoin(), pd.getInstalledPath());
32-
((PluginContextTheme)pluginContext).mTheme = null;
33-
pluginContext.setTheme(resId);
33+
//使用插件程序主题资源Id的时候需要区分版本
34+
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT <= 20) {
35+
pluginContext.setTheme(resId);
36+
} else {
37+
PluginDescriptor pd = PluginLoader.getPluginDescriptorByClassName(clazz.getName());
38+
((PluginContextTheme)pluginContext).mResources = PluginCreator.createPluginResourceFor5(PluginLoader.getApplicatoin(), pd.getInstalledPath());
39+
((PluginContextTheme)pluginContext).mTheme = null;
40+
pluginContext.setTheme(resId);
41+
}
3442
}
3543
}
36-
3744

3845
}

PluginTest/src/com/example/plugintest/fragment/PluginSpecFragment.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ public void onCreate(Bundle savedInstanceState) {
4141
//默认是宿主程序Application主题
4242
pluginContext = PluginLoader.getNewPluginContext(PluginSpecFragment.class);
4343
// 设置主题为插件程序主题
44-
PluginCompat.applyHostTheme(pluginContext, com.example.pluginsharelib.R.style.ShareTheme, PluginSpecFragment.class);
44+
PluginCompat.setTheme(pluginContext, R.style.PluginTheme, PluginSpecFragment.class);
45+
// 设置主题为宿主程序主题
46+
//PluginCompat.setTheme(pluginContext, com.example.pluginsharelib.R.style.ShareTheme, PluginSpecFragment.class);
4547

4648
pluginInflater = (LayoutInflater) pluginContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
4749
}

0 commit comments

Comments
 (0)