小米mix2发现自己不显示文本

2,924 阅读7分钟

假设有三个小伙伴,名字叫荣耀30pro,小米mix2和我,他们两个是我们公司的业务员,每天起早贪黑的巡店,卖我们公司的饮料,原本两个人负责不同的片区,不会有什么交集,他们两个的分界线在三里屯,但是在昨天他们都来到了三里屯,他们见面的时候已经接近尾声,都只剩下最后一家店,巡完店以后不约而同的坐在三里屯路边抽烟。

荣耀30pro首先搭话:“哥们,你今天巡了多少家店呀?”

小米mix2好像不怎么高兴,没有直接回答荣耀30pro的问题,开始回忆自己的工作历程,还有工作中遇到的艰辛,然后轻描谈写的说道。

“今天从八点开完会我就出来,总共跑了将近50家店,可是每一家店都很少要货,想想自己这个月的任务恐怕完不成了,又要被扣工资了。”

荣耀30pro听到这里安抚小米mix2道:“别灰心,这个月不是还有好几天嘛,应该没问题的。”

小米mix2叹息道:“哪有那么简单,现在是淡季,饮料卖的都不好。”

荣耀30pro感觉自己任务也完成了,想想自己还有一个销量比较好的店,想把这个店给小米mix2,帮他度过难关。荣耀30pro掏出手机打开了平时巡店使用的元气巡店app,打开了一个网点,拿到小米mix2面前对他说道:

“我的任务都已经完成了,最近我也想在家多陪陪家人,这个店就暂时给你巡了,这个店的销量很不错的。”

小米mix2没等荣耀30pro把话说完,就说“你手机上怎么有文字,我手机上怎么只有图标,你看看你的版本,为啥我的没有。”

荣耀30pro看了看自己的版本,发现是最新版本,然后回答小米mix2说,“我的是最新版本,再说这个文字从我安装app起那天就一直有,难道你一直没有嘛?”

小米mix2无奈的说:“对呀,我的一直没有,我还以为app本身就是这样,我还跟家里吐槽我们app很丑来着,而且很多地方都是看图标猜。”

荣耀30pro:“要不你跟技术员反应一下,让他们帮你看看是什么问题。”

小米mix2:”什么地方反应呀?“

荣耀30pro:“你用手机截一个图然后发给我,我发给他。”

小米mix2一顿操作后发给了荣耀30pro。然后荣耀30pro打开了办公软件,找到了技术帮助群,把问题发到了群里。

我正在电脑面前看我们公司app的代码,突然来了消息,我打开一看发现居然app中的文字都不显示,我表示很奇怪。我打开我的手机看了看发现一切正常。

于是我又开始了提出假设的阶段,大脑分析阶段:

虽然目前只有他的手机有这个现象,但这个原因可以肯定是由于布局导致的,我看了看那个页面的布局文件,发现并没有不一样,我尝试跟其他页面进行比较来寻找差异,发现差异说多也很多,说少也少。说白了我不确定。于是我就直接联系反馈问题的人。

我:“您好,请问一下app在您的手机上是一直这样嘛?”

荣耀30pro:“对,一直这样。”

我:“您的x页面显示正常嘛?”

荣耀30pro:“目前只要这个”

我:“好的,请您稍等我会尽快解决您的问题”

于是我又开始了观察差异,过一会儿我觉得这种方式不可靠,于是我把整个页面的布局放到一个新的项目中,然后打包发给了荣耀30pro。

我:“您好,麻烦您安装我发给您的这个app看一下。”

此时荣耀30pro和小米mix2已经聊完了相关事宜,各自回家了。

荣耀30pro:“他说安装以后长这样。”

middle_img_v2_2621ec87-0bb5-4228-9319-e756e06742eg.jpg 我发现果然不是,这下我觉得有希望了,因为目前我手上的代码从原来的项目中变成了只有1个布局文件。这下我可以大胆的猜测了,首先我看下面的文本跟上面不显示的文本有何异同,我发现上面的文本没有设置颜色,于是我尝试添加颜色,然后再打了一个包发了过去,这次我直接联系了小米mix2。

我:“您好,我再发一个包给您,您安装给我看看。”

小米mix2:“好的”

middle_img_v2_fee1499a-ec04-4cb0-9c50-3f59ed0be3ag.jpg

我:“您能再给我看一看在我们app里面的巡店记录页面嘛?”

小米mix2:“等一下我下载好了再给您看”

我:“为啥要重新下载?”

小米mix2:“安装app刚才那个app不需要卸载原来的嘛?”

我很无奈,我觉得是我刚才没说清楚导致的:“不用,我发的这个app是用来测试的,我们的巡店app不需要卸载。”

过了一会儿。

小米mix2:“巡店记录点不了。”

我思绪万千,我又没说清楚:“我说的是你们巡店的app,不是我发给你测试的app。”

小米mix2:

image-20211223160339474.png

我看了看,发现果然是没有设置颜色的都不显示。虽然现在我知道了解决办法,也就是将所有的文本都设置上颜色就可以解决,但是这样改动的地方比较多,效率比较低。于是我就问自己有没有更好的办法?首先我想到的是文本的默认颜色是在什么地方设置,我又怎么知道手机的默认颜色?下次如何避免类似的事情发生,当然有一个办法就是编写代码的时候都加上颜色,但是并不是所有的人都知道这个事情,而且不加颜色在测试中很大概率不会出现这样的问题,测试就不可能发现这个问题,同时开发人员也不知道,那就只能在线上体现了,所以我觉得我得找到那种一劳永逸的办法。

突然我想到了我曾经学过的主题,主题可以全局设置文本的颜色和大小等相关属性,于是我就开始翻阅百度和谷歌,找到了下面的属性:

 <item name="android:textViewStyle">@style/Text_Default_Style</item>

也就是如果我添加了这个属性,那么在没有设置文本相关属性的地方都会使用我们在这里设置的属性,于是我尝试添加了文本颜色:

 <style name="Text_Default_Style">
     <item name="android:textColor">@color/public_787878</item>
 </style>

于是我又把测试包发给了小米mix2。

我:“再帮我看看,是不是ok?”

小米mix2第二天给我回复到:“都能正常显示。”

然后就是同事的谢谢啥的。

然后小米mix2又跟荣耀30pro联系了,说了帮他解决问题的一些感谢话,当然他最感谢的是荣耀30pro,让他完成任务成为可能。

最后看看成功以后的图片:

image-20211223162123415.png

至于原因就是中国手机厂商有一些的默认颜色不同导致的,所以我们在开发app的时候一定要注意,尽量都给文本设置默认的颜色,其实这样也可以在开发的过程中不用反复给文本设置颜色啥的。同时这次我在寻找问题的过程中也学到了一个新的知识点,比如你的app可能设置的主题的代码是这样的:

 android:theme="@style/Theme.AppCompat.Light.NoActionBar"

您可能跳转进去看发现里面就设置了两个属性:

 <style name="Theme.AppCompat.Light.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

其实不是,这里的点也相当于继承,也就是 .NoActionBar 前面的 .,也就是这样写包含所有主题为 Theme.AppCompat.Light 的相关设置。可能你觉得不是还有一个 parent 参数嘛,那它的作用是啥,很明显作用就是你理解的那样,目前我的理解是两者相同的。