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

博观而约取,厚积而薄发。这篇文章主要讲述Android资源转换为字符串TypedValue警告相关的知识,希望能为你提供帮助。
好的,我正在寻找过去的东西......
每当我在我的应用程序中并且我更改活动时,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}

其他应用程序没有显示此类警告。这是一个预发布/接受压缩的东西吗?
答案您正在使用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>

【Android资源转换为字符串TypedValue警告】当我运行该应用程序时,我将收到警告消息,因为“text”需要字符串资源,而不是bool(我的应用程序按预期显示,因为标志转换为字符串“false”)。
另一答案仅在启用某个开发人员选项时才会出现这些警告。
设备设置> 开发人员选项> 禁用“启用视图属性检查”
另一答案我发现当从需要参数的小部件指定复数字符串时也会输出此警告。
例如:
< 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属性,因为它没有任何意义。
另一答案检查您是否有: -
< TextView android:text="@+id/labelText"/>

在您的资源文件中。
另一答案android:text="@+id/fooText的问题
尝试更改你的.xml:
< TextView android:id="@+id/foo" android:text="@+id/fooText"/>

对此:
< TextView android:id="@+id/foo" android:text=""/>

另一答案在我的情况下,问题是在ListPreference默认值。即使你输入String(例如"10"),它也将被解释为int,然后转换为String,从而抱怨。
例如,这会发出警告:
< ListPreference android:defaultValue="https://www.songbingjia.com/android/10" ... />

但这不会:
< ListPreference android:defaultValue="https://www.songbingjia.com/android/@string/ten" ... />

并在@string/ten中定义strings.xml为:
< string name="ten" translatable="false"> 10< /string>

愚蠢,但它摆脱了警告。

    推荐阅读