近段时间,写了一下多主题支持的软件,用的是Theme+自定义Attr实现的,但是我用的是Fragment,需要inflate,但我发现我直接获取LayoutInflater进行inflate会报错,所以查阅了一下资料,得出要用setTheme过的Activity进行获取,所以我用如下方法实现了
有一个全局的Application叫MyApplication,然后有一个setTheme过的Activity
Application中有两个static方法
public static void setActivity(Activity activity) {
MyApplication.activity = activity;
} public static LayoutInflater getLayoutInflater() {
if (layoutInflater == null) {
layoutInflater = getActivity().getLayoutInflater();
}
return layoutInflater;
}在Activity中进行setTheme之后调用MyApplication.setActivity(this);进行初始化,以后只要使用MyApplication.getLayoutInflater()得到的LayoutInflater进行inflate就行了。
哦顺便加上获取对应主题颜色值的代码
public static int getColor(int attr) {
int[] attrs = new int[]{attr};
Context context = MyApplication.getActivity();
TypedArray ta = context.obtainStyledAttributes(attrs);
return ta.getColor(0, 430);
}
本文介绍了一种使用Theme+自定义Attr实现多主题支持的方法,并详细解释了如何解决在Fragment中inflate布局时遇到的问题。通过一个全局Application和setTheme过的Activity,确保了inflate操作的正确执行。

被折叠的 条评论
为什么被折叠?



