皮肤切换

来源:互联网 发布:华为手机网络连接异常 编辑:程序博客网 时间:2024/04/27 20:37

  皮肤切换

思路:皮肤切换要两个包:皮肤包   和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);


 

 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);



 


原创粉丝点击