好的,我正在寻找过去的东西..
每次我在我的应用程序中并且我更改活动时,logcat都会报告一系列警告:
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002b}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002c}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002d}
其他应用未显示此类警告。这是预发布/接受压缩的事吗?
答案 0 :(得分:60)
仅在启用某个开发者选项时才会出现这些警告。
设备设置>开发人员选项>禁用“启用视图属性检查”
答案 1 :(得分:55)
您正在使用bool资源,其中包含字符串。
通过打开生成的R.java文件并从logcat消息中搜索资源ID,您可以找到错误使用的资源:
0x7f08002b
0x7f08002c
0x7f08002d
这三个应该来自您的bool.xml文件(警告消息中的“t = 0x12”表示资源为TYPE_INT_BOOLEAN)。
然后,找到项目中使用这些资源ID的位置(可能是布局xml,但可以在任何地方),并确保类型匹配。
这是一个生成该日志消息的TextView示例。如果在我的res / values / bool.xml中我有:
<resources>
<bool name="foo_flag">false</bool>
</resources>
我可以从布局xml文件中错误地引用它:
<TextView android:id="@+id/foo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@bool/foo_flag"></TextView>
当我运行该应用程序时,我会收到警告消息,因为“text”需要字符串资源,而不是bool(我的应用程序按预期显示,因为标志转换为字符串“false”)。
答案 2 :(得分:3)
我发现从需要参数的小部件中指定复数字符串时也会输出此警告。
例如:
<plurals name="song_count">
<item quantity="one">%d song in playlist</item>
<item quantity="other">%d songs in playlist</item>
</plurals>
当膨胀包含引用它的窗口小部件的活动时,将显示警告:
<TextView
android:id="@+id/tv_total_songs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@plurals/song_count" />
毫无疑问,在对视图进行膨胀以设置正确的参数后替换字符串,例如:
playlistSongCount.setText(
getResources().getQuantityString(
R.plurals.song_count,
songCount,
songCount));
这里显而易见的解决方案是从布局中删除android:text
属性,因为它没有任何意义。
答案 3 :(得分:2)
检查您是否有: -
<TextView android:text="@+id/labelText"/>
在您的资源文件中。
答案 4 :(得分:0)
android:text="@+id/fooText
尝试更改您的.xml:
<TextView
android:id="@+id/foo"
android:text="@+id/fooText"/>
对此:
<TextView
android:id="@+id/foo"
android:text=""/>
答案 5 :(得分:0)
就我而言,问题出在ListPreference
的默认值中。即使您将其键入为String
(例如"10"
),它也将被解释为int
,然后转换为String
,从而产生抱怨。
例如,这将给出警告:
<ListPreference
android:defaultValue="10"
...
/>
但这不会:
<ListPreference
android:defaultValue="@string/ten"
...
/>
,并将@string/ten
中的strings.xml
定义为:
<string name="ten" translatable="false">10</string>
傻瓜,但它摆脱了警告。