皮肤切换
来源:互联网 发布:华为手机网络连接异常 编辑:程序博客网 时间:2024/06/10 18:09
皮肤切换
思路:皮肤切换要两个包:皮肤包 和apk(主包)
当在设置中点击切换时 就会读取 皮肤包内容,从而更换资源的Context对象,并利用了观察者模式 切换所有的activity。从而实现皮肤切换。
/**
* 如果设置控件皮肤 那么调用此方法
*
* @param context 当前资源上下文对象 context
* @param name 当前控件的id名
* @param resType 当前切换皮肤的控件的切换类型,color 还是drawble
* @param view 当前切换皮肤的控件
* @param viewType 当前切换的是背景还是文字 0 :背景 1:文字
*/
public static void setElementSkin(Context context ,View view ,String name,String resType,int viewType){
int i=0;
//当前引用资源包名(主包名)
String skinPackage = context.getPackageName();
if(skinPackage!=null){
//主包名
String xctPackageName =SkinManagerObservable.getInstance().getmContext().getPackageName();
//String xctPackageName = this.getPackageName();
//引用主包资源
if(skinPackage.equals(xctPackageName)){
Resources resources = context.getResources();
i = resources.getIdentifier(name, resType, context.getPackageName());
setSkin(view,resType,viewType,i,resources);
}else {
//引用资源包
Resources resources = context.getResources();
i = resources.getIdentifier(name, resType, context.getPackageName());
if(i!=0){
setSkin(view,resType,viewType,i,resources);
}else {//如果资源包没有找到资源 的情况,从主包资源找
Resources mainPackageRes = SkinManagerObservable.getInstance().getmContext().getResources();
int id = mainPackageRes.getIdentifier(name, resType, SkinManagerObservable.getInstance().getmContext().getPackageName());
setSkin(view,resType,viewType,id,mainPackageRes);
}
}
}
}
/**
* 设置控件颜色等属性
* @param view
* @param resType
* @param viewType
* @param id
* @param resources
*/
private static void setSkin(View view,String resType,int viewType,int id,Resources resources){
if("color".equals(resType)){
if(viewType==0){ //背景
view.setBackgroundColor((resources.getColor(id)));
}else{//文字
if(view instanceof TextView){
TextView text = (TextView) view;
text.setTextColor(resources.getColor(id));
}else if(view instanceof Button){
Button b = (Button) view;
b.setTextColor(resources.getColor(id));
}else {
throw new IllegalArgumentException("控件"+view.toString()+"不能设置textcolor 属性");
}
}
}else if("drawable".equals(resType)){
view.setBackgroundDrawable(resources.getDrawable(id));
}
}
/**
* 获取控件的id (区别于切换皮肤)
* 如果是初始化控件 调用此方法
* @param name
* @param resType
* @return
*/
public static int getElementID(String name,String resType){
Resources mainPackageRes = SkinManagerObservable.getInstance().getmContext().getResources();
Resources skinPackageRes = SkinManagerObservable.getInstance().getrContext().getResources();
int id = 0;
if("id".equals(resType)||"layout".equals(resType)||"string".equals(resType)||"style".equals(resType)){
id = mainPackageRes.getIdentifier(name, resType, SkinManagerObservable.getInstance().getmContext().getPackageName());
}else /*("drawable".equals(resType) || "color".equals(resType) || "string".equals(resType))*/{
id = skinPackageRes.getIdentifier(name, resType, SkinManagerObservable.getInstance().getrContext().getPackageName());
if(id==0){
id = mainPackageRes.getIdentifier(name, resType, SkinManagerObservable.getInstance().getmContext().getPackageName());
}
}
return id;
}
注:activity中的控件获取时将不再使用R.id.xxx或者 R.layout.xxx之类。而采用根据id名称来获取id. (见上面方法)
如:
setContentView(getElementID("xct_lthj_quotrefreshrate_portrait", "layout");
buy_price_parent = (LinearLayout) findViewById(getElementID("xct_lthj_mt_entrust_buy_rela_price_parent", "id");
getElementID("xct_lthj_color_font_red", "color");
getElementID("xct_lthj_draw_lview_bg", "drawable");
10. 屏蔽系统键盘: EditeText.setInputType(InputType.TYPE_NULL);
注:activity中的控件获取时将不再使用R.id.xxx或者 R.layout.xxx之类。而采用根据id名称来获取id. (见上面方法)
如:
setContentView(getElementID("xct_lthj_quotrefreshrate_portrait", "layout");
buy_price_parent = (LinearLayout) findViewById(getElementID("xct_lthj_mt_entrust_buy_rela_price_parent", "id");
getElementID("xct_lthj_color_font_red", "color");
getElementID("xct_lthj_draw_lview_bg", "drawable");
10. 屏蔽系统键盘: EditeText.setInputType(InputType.TYPE_NULL);
12-----------------------------------
android中调起评分控件
Uri uri = Uri.parse("market://details?id="+getPackageName());
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
- 皮肤切换
- CSS 样式皮肤切换
- ExtJs切换皮肤
- Ext cookie切换皮肤
- 关于网页皮肤切换
- Jquery Cookie切换皮肤
- WPF动态切换皮肤
- js 实现皮肤切换
- Android 皮肤切换
- CSS实现皮肤适时切换
- jquery学习笔记 切换皮肤
- 网页皮肤动态切换机制
- C#+Devexpress 切换皮肤教程
- JavaWeb开发切换皮肤技术
- Flex css 实现多种皮肤切换
- FLEX实践—动态切换应用皮肤
- css+javascript实时切换风格皮肤
- 关于Silverlight 皮肤切换的的解决方法.
- 游戏更新-拖拉机&升级 Android
- HDFS dfsclient写文件过程 源码分析
- Spring MVC 框架搭建及详解
- How to optimize NexentaStor performance?
- 中断标志字是自动置位的吗
- 皮肤切换
- 一篇解答xstream转换过程中可能出现问题的作文
- strcpy、memcpy与memmove的实现
- 苹果不经意间要求开发者提交针对iOS 7优化的App图标
- 创新工场三道编程题
- std::nothrow
- How to switch trial to comercial license for HA without Internect connection on Nexenta
- linux 系统网卡问题debug
- 2014届华为校园招聘机试题2