2012-08-16 5 views
23

Während auf meinem Projekt Android Lint läuft ich auf diese Warnung kam„Mögliche Überzeichnungs: Wurzelelement malt Hintergrund“

Mögliche Überzeichnungs: Wurzelelement malt Hintergrund @ ziehbar/main mit ein Thema, das auch eine Hintergrundfarben

Wo abgeleitete Thema ist @android:style/Theme.NoTitleBar.Fullscreen

Kann mir jemand erklären, warum ist das Kommen und wie es zu entfernen ??

Mein 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" > 

Der Teil des manifesten wo Thema definiert ist

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

Antwort

16

Um Ihre Apps Leistung (vermeiden Overdraw) zu optimieren, können Sie folgendes tun:

  • deklarieren Sie ein Thema in 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> 
    

  • Änderung der Manifest:

    <application 
        android:icon="@drawable/ic_logo" 
        android:label="@string/app_name" 
        android:theme="@style/MyTheme" > 
    
  • den Hintergrund Erklärung in "My xml"
+8

Wie wäre es, wenn ich brauche verschiedenen Hintergründen für einige Teile der App zu setzen? – Franco

+2

@Franco Erstellen Sie einfach einen separaten Stil für Ihre Ansicht mit Hintergrundelement darin. Ich weiß, es ist nur ein Workaround, also können Sie einfach Tools einstellen: ignore = "Overdraw". – Ov3r1oad

+0

@Franco können Sie sie in verschiedenen Aktivitäten haben, die verschiedene Themen haben. –

2

Der Grund, warum Sie diese Flusen Warnung erhalten entfernen Ist das Ihre Aktivität und Ihr lineares Layout? zeichne den Hintergrund. Daher wird der sichtbare Bereich zweimal gezeichnet.

Wie debuggen Sie das? Führen Sie sdk/tools/hierarchyviewer aus und überprüfen Sie die Ansichtshierarchie, um festzustellen, welche Ansicht einen nicht angezeigten Hintergrund enthält. (Sie müssen ein Android-Gerät läuft Dev Build-ROM haben)

Was läuft unter der Haube? Beachten Sie, dass fast alle Android-Designs Hintergrund haben, was bedeutet, wenn Sie jemals ein "LinearLayout" erstellen möchten, das den gesamten Bildschirm und einen Hintergrund abdeckt, sollten Sie entweder windowBackground = "@ null" der Aktivität festlegen oder die Hintergrundeinstellung entfernen im linearen Layout.

11

aktualisieren

Überprüfen Sie die Kommentare oder this link überprüfen. Wie Marcin erwähnt, ist meine Lösung hier kein guter Ansatz, da sie Artefakte verursachen kann. Ich habe es benutzt, um eine lange Zeit ohne Probleme zu vermeiden, aber im Allgemeinen ist es vielleicht kein Daumen der Regel, wie die Kommentare von Chet Haase zu dieser Technik sagen.

Ursprüngliche Antwort

Der beste Ansatz, den ich gefunden habe, ist als null den Standard-Hintergrund gesetzt und den Hintergrund, den Sie in jedem Layout benötigen anwenden.

Der Grund ist, wenn Sie einen Standardhintergrund in einem Thema oder sogar verschiedene Themen mit unterschiedlichen Hintergründen wie oben vorgeschlagen festlegen, bedeutet dies, dass das gesamte Layout mit diesem Hintergrund gefüllt wird. In den meisten Fällen benötigen Sie keinen Hintergrund, der 100% des Bildschirms ausfüllt, da Sie über Symbolleisten, Kopf- und Fußzeilen und andere Elemente verfügen, die zu einer Überzeichnung führen.

Um null Hintergrund zu einem Thema gelten:

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

zu überprüfen, um in den Entwickler-Optionen auf dem Emulator/Gerät nur aktivieren Sie die Option Overdraw overdraw. Vertrauen Sie nicht 100% Flusen Warnungen, weil es einige Fehler im Tracker gab, von denen ich nicht sicher bin, dass sie vollständig behoben sind.

Weitere Informationen: What is overdraw and why is an issue?

+0

Das ist eine gute Argumentationslinie, die Sie hier präsentieren , aber bitte lesen Sie den Abschnitt "Vermeiden von Null-Fensterhintergründen" in [Entwickeln für Android VIII Die Regeln: Benutzeroberfläche] (https://medium.com/google-developers/developing-for-android-viii-e91ced595fac) für mögliche Nachteile dieses Ansatzes. –

+0

@Marcin Kozinski Danke, Sie haben Recht. – Sotti

+0

@Marcin Altho mit Chet Empfehlung (verwenden Sie den Standard-Hintergrund) ist schwieriger zu überziehen auf Symbolleisten und anderen Layout-Elementen, da der Hintergrund wird immer die gesamte Bildschirmgröße. – Sotti