android - Android资源转换为字符串TypedValue警告

好的,我正在寻找过去的东西..

每次在我的应用程序中,更改 activity 时,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}



其他应用程序未显示此类警告。 这是一个pre-release/aapt 的情况吗?

时间:

在需要字符串的情况下使用布尔资源。

通过打开你生成的R.java 文件, 并从logcat消息中搜索资源 id,你可以发现正在使用的资源不正确:


0x7f08002b


0x7f08002c


0x7f08002d



所有三个都应该来自你的bool.xml 文件("t=0x12"在警告消息中,资源是 TYPE_INT_BOOLEAN 。) 。

然后,查找项目( 可能是布局 xml,但可能在任何地方) 中使用的资源 id,并确保类型匹配。

下面是将生成日志消息的TextView的示例。 如果在我的res/values/bool.xml 中,我有:


<resources>


 <bool name="foo_flag">false</bool>


</resources>



我不能从布局 xml file: 中错误地引用它


<TextView android:id="@+id/foo"


 android:layout_width="wrap_content"


 android:layout_height="wrap_content"


 android:text="@bool/foo_flag"></TextView>



运行该应用程序时,会收到警告消息,因为"text"期望字符串资源,而不是布尔( 我的应用程序显示为预期,因为该标志已转换为字符串"false") 。

只有在启用了特定的开发人员选项时才会出现这些警告。

设备设置> 开发人员选项> 禁用'视图属性检查"'

在指定需要参数的widget 时,我还会发现这个警告也被输出。

举个例子:


<plurals name="song_count">


 <item quantity="one">%d song in playlist</item>


 <item quantity="other">%d songs in playlist</item>


</plurals>



在activity包含引用它的窗口widget的活动时,将显示警告:


<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 属性,因为它没有任何用途。

...