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

"Возможное переутомление: фон красок корневого элемента"

При запуске Android Lint в моем проекте я столкнулся с этим предупреждением

Возможное переубеждение: Краски элемента корня фона @drawable/main с тема, которая также рисует фон

Где выведенная тема @android:style/Theme.NoTitleBar.Fullscreen

Может кто-нибудь объяснить мне, почему это происходит и как его удалить?

Мой xml:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/main" //***LINT warning***
        android:orientation="vertical"
        android:weightSum="3" >

Часть манифеста, где определена тема

 <application
        android:icon="@drawable/ic_logo"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
4b9b3361

Ответ 1

Чтобы оптимизировать производительность ваших приложений (избегайте переустановки), вы можете сделать следующее:

  • объявить тему в res/values/styles.xml

    <style name="MyTheme" parent="android:Theme">
        <item name="android:background">@drawable/main</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>
    

  • измените Манифест:

    <application
        android:icon="@drawable/ic_logo"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >
    
  • удалите выражение фона в "My xml"

Ответ 2

Обновление

Ознакомьтесь с комментариями или просмотрите эту ссылку. Как упоминает Марцин, мое решение здесь не является хорошим подходом, поскольку оно может вызывать артефакты. Я использовал его, чтобы избежать чрезмерного перебора в течение длительного времени без каких-либо проблем, но в целом может быть не большим правилом в соответствии с комментариями Чет Хаазе об этой технике.

Оригинальный ответ

Лучший подход, который я нашел, - установить нулевой фон по умолчанию и применить фон, который вам нужен в каждом макете.

Причина в том, что вы устанавливаете фон по умолчанию в теме или даже разные темы с разными фонами, как было предложено выше, это означает, что весь макет будет заполнен этим фоном. В большинстве случаев вам не нужен фон, заполняющий 100% экрана, потому что у вас есть панели инструментов, верхние и нижние колонтитулы и другие элементы поверх этого фона, которые вызовут чрезмерный захват.

Чтобы применить нулевой фон к теме:

<style
    name="ThemeName" parent="ParentTheme">
    <item name="android:windowBackground">@null</item>
</style>

Чтобы проверить превышение, просто включите опцию Show Overdraw в настройках dev на вашем эмуляторе/устройстве. Не доверяйте предупреждениям 100% lint, потому что в трекере есть некоторые ошибки, которые я не уверен, полностью исправлены.

Дополнительная информация: Что такое overdraw и почему проблема?

Ответ 3

Причина, по которой вы получаете это предупреждение, заключается в том, что ваша активность и ваш линейный макет пытаются рисовать фон. Поэтому видимая область рисуется дважды.

Как отладить это? Запустите sdk/tools/hierarchyviewer и проверьте иерархию представления, чтобы увидеть, какой вид имеет фон, который не отображается. (Вам нужно, чтобы на устройстве Android работало dev build rom)

Что работает под капотом? Обратите внимание, что почти все темы для Android имеют фоновый указатель, что означает, что если вы когда-либо захотите создать "LinearLayout", который охватывает весь экран и с фоновой подсветкой, лучше либо установить действие windowBackground = "@null", либо удалить настройку фона в линейном макете.