38

プロジェクトでAndroidLintを実行しているときに、この警告が表示されました

オーバードローの可能性:ルート要素は、背景もペイントするテーマで@ 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" >
4

5 に答える 5

30

アプリのパフォーマンスを最適化する (オーバードローを避ける) には、次の操作を実行できます。

  • でテーマを宣言する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」の背景宣言を削除します
于 2012-08-24T16:05:02.277 に答える
18

アップデート

コメントを確認するか、このリンクを確認してください。Marcin が言及しているように、ここでの私の解決策は、アーティファクトを引き起こす可能性があるため、良いアプローチではありません。私はオーバードローを避けるために長い間問題なく使用してきましたが、この手法に関する Chet Haase のコメントによると、一般的には経験則ではない可能性があります。

元の答え

私が見つけた最善の方法は、デフォルトの背景を null として設定し、各レイアウトで必要な背景を適用することです。

その理由は、テーマにデフォルトの背景を設定したり、上記のように背景が異なる別のテーマを設定したりすると、レイアウト全体がその背景で塗りつぶされることを意味します。ほとんどの場合、オーバードローの原因となる背景の上にツールバー、ヘッダー、フッター、およびその他の要素があるため、画面の 100% を満たす背景は必要ありません。

テーマに null 背景を適用するには:

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

オーバードローを確認するには、エミュレーター/デバイスの開発オプションで [オーバードローを表示] オプションを有効にします。100% lint の警告を信用しないでください。トラッカーには、完全に修正されたかどうかわからないバグがいくつかあったためです。

詳細: オーバードローとは何ですか? なぜ問題なのですか?

于 2015-06-11T12:52:08.403 に答える
2

この lint 警告が表示される理由は、アクティビティとリニア レイアウトの両方が背景を描画しようとするためです。したがって、可視領域は 2 回描画されます。

これをデバッグする方法は?sdk/tools/hierarchyviewer を実行し、ビュー階層を調べて、表示されていない背景を持つビューを確認します。(dev build rom を実行している Android デバイスが必要です)

ボンネットの下で何が実行されていますか? ほとんどすべての android テーマには背景が指定されていることに注意してください。つまり、画面全体をカバーし、背景を持つ "LinearLayout" を作成する場合は、アクティビティの windowBackground="@null" を設定するか、背景設定を削除することをお勧めします。直線的なレイアウト。

于 2014-12-17T20:24:07.243 に答える