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

时间:2011-02-04 23:31:12

标签: android resources

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

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

其他应用未显示此类警告。这是预发布/接受压缩的事吗?

6 个答案:

答案 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>

傻瓜,但它摆脱了警告。