最近同事写新项目,出现了一个看起来非常奇怪的问题,APP桌面的名字怎么也不能设置成自己想要的名字;
举个栗子,正常情况下:
<application
...........
android:label="@string/app_name"/>
"app_name" 是我们设置在桌面显示的APP名字。我们设置成什么就显示成什么。
但我同事发现竟然没发生效!然后发现“app_name”与某个activity设置的label一样因(为使用了ToolBar)!
后来我深究了一番,原来虽然我们都知道application与activity都可以设置label,但是他们两是有优先级的!而且activity的优先级高于application。
所以,如果activity 与application都设置了label的话,activity会覆盖application的label显示在桌面上。当然有些项目没有使用toolbar也就一般不会存在在activity 设置的情况。
但我这个同事的activity是主activity,即带有MAIN的activity。所以我的解决办法是:让他把Manifest 中主activity设置的label去掉,改为在具体的activity中用代码设置toolbar。这样就不会冲突了。
顺便再提一个大家可能l比较常见的也是关于labe的问题:
Manifest merger failed : Attribute application@label value=(@string/app_name),
这种问题大家一般都是工程A引用B库工程,而恰恰B工程中的Manifest 也使用了 app_name,所以编译时会报冲突的错误。解决起来也很简单:
1.manifest 的节点下面添加代码
<manifest
......
xmlns:tools="http://schemas.android.com/tools"
2.在 application中添加代码
<application
......
tools:replace="android:label"/>
解决啦,小朋友和小朋友的妈妈都喜欢~