当前位置: 首页 > wzjs >正文

网站制作的网站做网站是咋收费的

网站制作的网站,做网站是咋收费的,网站建设维护相关人员培训,免费域名注册查询之前写过一篇笨拙的方式实现暗夜模式,但是当真正去适配的时候发现简直恶心至极;然后想通过一些方式可以把笨拙的方式变得优雅; 之前实现暗夜模式的快速通道,这篇文章在基于这个基础上优化而来 目录 背景 优化步骤 OK&#xf…

之前写过一篇笨拙的方式实现暗夜模式,但是当真正去适配的时候发现简直恶心至极;然后想通过一些方式可以把笨拙的方式变得优雅;

之前实现暗夜模式的快速通道,这篇文章在基于这个基础上优化而来

目录

背景

优化步骤

OK,思路有了下面是具体的实现方式;

自定义View继承系统原有控件

BaseDarkLightModeAttrProcessor 代码

 View自己是遍历改变子View模式

背景

简述下为什么选择自己更换颜色值,图片的方式。在实现上发现采用系统的方式,Activity必须重启一次。而我们的框架是单Activity+N Fragment的方式,是为了达到只有一个地图UI甲方要求,但是这样就需要以Fragment Tag为key值缓存缓存地图上线路、marker信息;所以Activity重启所要做的适配难度直接让我放弃了系统方式。

那么现在到了真正适配暗夜模式的开发阶段,发现适配一个界面就等于重构一次xml,而且代码量成指数级上升;

优化步骤

第一步优化:

当时想要怎么优化,脑海里第一个念头就是自定义View 继承 系统原有控件;设置定义属性 在xml中就可以定义白天颜色值,暗夜颜色值;然后外部传入当前模式,达到减少Fragment上的代码量。

第二步优化:

发现这样还是有必须在Fragment中找到所有需要切换的控件id,然后指定模式,况且还有很多是没有预设ID的View;所以就想到了可以让View自己是遍历改变子View模式;这样在设置模式的时候一行代码即可。

OK,思路有了下面是具体的实现方式;

自定义View继承系统原有控件

public class DarkConstraintLayout extends ConstraintLayout implements DarkLightMode {BaseDarkLightModeAttrProcessor<TjConstraintLayout> processor;public TjConstraintLayout(@NonNull Context context) {super(context);init(context, null, 0);}public DarkConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context, attrs, 0);}public DarkConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs, defStyleAttr);}private void init(Context context, AttributeSet attrs, int defStyleAttr) {processor = new BaseDarkLightModeAttrProcessor<TjConstraintLayout>(context, attrs, defStyleAttr, this);}/*** 切换模式** @param darkMode 是否深色模式*/@Overridepublic void processMode(boolean darkMode) {LogUtils.e("TjConstraintLayout processMode" + darkMode);processor.process(darkMode);}}

在init()方法中初始化 BaseDarkLightModeAttrProcessor 去统一控制

BaseDarkLightModeAttrProcessor 代码

public class BaseDarkLightModeAttrProcessor<T extends View> {protected T targetView;protected Drawable lightBackground;protected Drawable darkBackground;protected int lightBackgroundColor = -1;protected int darkBackgroundColor = -1;private boolean darkMode = false;public BaseDarkLightModeAttrProcessor(Context context, AttributeSet attrs, int defStyle, T targetView) {this.targetView = targetView;if (attrs != null) {// 所有需要适配黑夜模式的View样式属性全部定义在NightMode样式下,在xml中定义了,但View不识别的样式会被忽略TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.DarkLightMode, defStyle, 0);parseAttrs(typedArray);typedArray.recycle();process(darkMode);}}/*** 设置浅色背景** @param lightBackground 浅色背景*/public void setLightBackground(Drawable lightBackground) {this.lightBackground = lightBackground;}/*** 设置深色背景** @param darkBackground 深色背景*/public void setDarkBackground(Drawable darkBackground) {this.darkBackground = darkBackground;}public Drawable getLightBackground() {return lightBackground;}public Drawable getDarkBackground() {return darkBackground;}/*** 设置浅色背景颜色** @param color 浅色背景颜色*/public void setLightBackgroundColor(int color) {this.lightBackgroundColor = color;}/*** 设置深色背景颜色** @param color 深色背景颜色*/public void setDarkBackgroundColor(int color) {this.darkBackgroundColor = color;}/*** 设置是否深色模式** @param darkMode 是否深色模式*/public void setDarkMode(boolean darkMode) {this.darkMode = darkMode;}public boolean isDarkMode() {return darkMode;}protected void parseAttrs(TypedArray typedArray) {lightBackground = typedArray.getDrawable(R.styleable.DarkLightMode_lightBackground);darkBackground = typedArray.getDrawable(R.styleable.DarkLightMode_darkBackground);lightBackgroundColor = typedArray.getColor(R.styleable.DarkLightMode_lightBackgroundColor, -1);darkBackgroundColor = typedArray.getColor(R.styleable.DarkLightMode_darkBackgroundColor, -1);}public final void process() {process(darkMode);}public void process(boolean darkMode) {this.darkMode = darkMode;if (this.darkMode) {if (darkBackground != null) {if (Build.VERSION.SDK_INT < 16) {targetView.setBackgroundDrawable(darkBackground);} else {targetView.setBackground(darkBackground);}}if (darkBackgroundColor != -1) {targetView.setBackgroundColor(darkBackgroundColor);}} else {if (lightBackground != null) {if (Build.VERSION.SDK_INT < 16) {targetView.setBackgroundDrawable(lightBackground);} else {targetView.setBackground(lightBackground);}}if (lightBackgroundColor != -1) {targetView.setBackgroundColor(lightBackgroundColor);}}}}

当然不是针对的自定义View,或者别的独特的系统控件,可以继承 BaseDarkLightModeAttrProcessor 单独去处理。这里就不贴代码了

 View自己是遍历改变子View模式

    public static void processAllViewDarkMode(View view, boolean darkMode) {if (view instanceof DarkLightMode) {((DarkLightMode) view).processMode(darkMode);}if (view instanceof ViewGroup) {ViewGroup viewGroup = (ViewGroup) view;for (int i = 0; i < viewGroup.getChildCount(); i++) {View childView = viewGroup.getChildAt(i);if (childView instanceof DarkLightMode) {((DarkLightMode) childView).processMode(darkMode);}processAllViewDarkMode(childView, darkMode);}}}

使用

    @Overridepublic void onNightModeChanged(boolean isDarkMode) {super.onNightModeChanged(isDarkMode);viewModel.setDarkMode(commonNavigator, isDarkMode);DarkLightModeUtil.processAllViewDarkMode(binding.getRoot(), isDarkMode);}

原来需要上百行的代码,简简单单一行代码就可以实现。当然还可以有一些拓展 就不一一赘述,

最后感谢我的领导,让我学会了思考,而不是一味地做代码重复操作。


文章转载自:

http://wcJZmZmp.kkgbs.cn
http://B90M6Cb1.kkgbs.cn
http://COK70jGY.kkgbs.cn
http://w8NFFECu.kkgbs.cn
http://7DUtzTmc.kkgbs.cn
http://iQwn9gp8.kkgbs.cn
http://FaNKKood.kkgbs.cn
http://oqHZRYVa.kkgbs.cn
http://sqtzDc64.kkgbs.cn
http://7M3GTTbq.kkgbs.cn
http://Fs57enpL.kkgbs.cn
http://DkaKKjJY.kkgbs.cn
http://N8IlGVdU.kkgbs.cn
http://pYuf05Ig.kkgbs.cn
http://YcuI9eRr.kkgbs.cn
http://cwlTYSfR.kkgbs.cn
http://MxrDsb8L.kkgbs.cn
http://o89GwLLF.kkgbs.cn
http://ndPYVyCA.kkgbs.cn
http://Rh5oBVWB.kkgbs.cn
http://6RHyZ5Kz.kkgbs.cn
http://dGF4wbFR.kkgbs.cn
http://rvZnnLvW.kkgbs.cn
http://a4wDgynf.kkgbs.cn
http://IHoOZhiS.kkgbs.cn
http://M9SxAwp2.kkgbs.cn
http://7i35WxX3.kkgbs.cn
http://lk8JIUJV.kkgbs.cn
http://fltLJSuZ.kkgbs.cn
http://ISN3lDyn.kkgbs.cn
http://www.dtcms.com/wzjs/774776.html

相关文章:

  • 上海有多少个网站科技公司聊城百度做网站的
  • 网站开发用户名不存在简单的装x编程代码
  • 设计的商城网站建设asp网站 会员注册
  • 南京网站制作公司怎么样网站logo
  • 网站开发英文参考文献2015年后外贸网站特效
  • 青海西宁制作网站企业帝国做视频网站
  • 招商网站建设哪家好室内设计效果图在哪里找
  • 代理服务网站万网域名证书
  • 新人怎么自己做网站学校网站的建设
  • 箱包网站模板seo公司培训
  • 怎么做网站反向链接北京seo网站设计
  • 学校机构网站建设内容h5开发网站优点
  • 小说网站开发背景网页建站怎么做
  • 如何给自己的公司做网站简洁文章类网站
  • 专门做二手书网站或app五 网站开发总体进度安排
  • 网站的设计方法有哪些市场营销策略名词解释
  • 成都电子商城网站开发wordpress登录页面修改
  • 网站手机版建设网站域名备案在阿里云怎么做
  • 中文的网站做不成二维码wordpress迁移typecho
  • 公司和公司网站的关系wordpress局部内容
  • 瑞金网站建设推广做网站大概需要多少费用
  • 网站制作如皋定制微信怎么做
  • 英德市住房城乡建设网站上海手机网站哪家最好
  • 国内做的比较好的旅游网站建设黑彩网站需要什么
  • 一个备案号可以放几个网站平面设计作品集欣赏
  • cnzz统计代码放在网站南海网站建设哪家好
  • 网站建设放在什么科目电子商务网站开发目标
  • 中国建设企业银行网站首页wordpress修改个人头像
  • 张家界网站建设企业wordpress 在线留言
  • 网站分类 维护济南最新消息今天