Подтвердить что ты не робот

Android-ресурсы, преобразующиеся в строку TypedValue warning

Хорошо, я смотрю прямо что-то здесь.

Каждый раз, когда я нахожусь в своем приложении, и я меняю действия, 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}

Другие приложения не показывают таких предупреждений. Это предварительная версия/сжатие?

4b9b3361

Ответ 1

Вы используете ресурс bool, где ожидается строка.

Вы можете найти, какой ресурс используется некорректно, открыв ваш сгенерированный файл R.java и выполнив поиск идентификаторов ресурсов из сообщения logcat:

0x7f08002b
0x7f08002c
0x7f08002d

Все три должны быть из вашего файла bool.xml( "t = 0x12" в предупреждающем сообщении означает, что ресурсы TYPE_INT_BOOLEAN).

Затем найдите, где эти идентификаторы ресурсов используются в вашем проекте (возможно, макет 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>

Когда я запустил это приложение, я получу предупреждающее сообщение, так как "текст" ожидает строковый ресурс, а не bool (мое приложение выглядит так, как ожидалось, хотя, поскольку флаг преобразуется в строку "false" ).

Ответ 2

Эти предупреждения появлялись только тогда, когда была включена определенная опция разработчика.

Настройки устройствa > Параметры разработчикa > Отключить "Включить проверку атрибута просмотра"

Ответ 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 из макета, поскольку он не имеет никакой цели.

Ответ 4

Проверьте, нет ли у вас: -

<TextView android:text="@+id/labelText"/>

в файле ресурсов.

Ответ 5

Проблема в android:text="@+id/fooText

Попробуйте изменить свой .xml:

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

Для этого:

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

Ответ 6

В моем случае проблема была в ListPreference умолчанию 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>

Тупой, но это избавляет от предупреждения.