博观而约取,厚积而薄发。这篇文章主要讲述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>
愚蠢,但它摆脱了警告。
推荐阅读
- android - 从库中获取资源ID
- Hmac在Google Apps脚本中登录,当Secret和Digest是base64编码时
- Android UI测试崩溃,但应用运行良好
- Visual Studio应用程序中心(appium-test-extension-1.0.jar;打开zip文件时出错)
- 为什么官方文档中的Android Instrumented Test示例不起作用()
- AWS Device Farm上的Appium测试未按指定顺序执行
- 超链接不适用于Android OS 5及更高版本
- 我该如何使用此Webview Bar( - Android Studio)
- 十大最佳Android图像加载和缓存库