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" >
アプリのパフォーマンスを最適化するには(オーバードローを避けます)、次のようにします。
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" >
更新
コメントをチェックするか、 このリンク をチェックしてください。 Marcinが述べているように、ここでの私の解決策はアーティファクトを引き起こす可能性があるため、良いアプローチではありません。私は問題なく長い間オーバードローを回避するためにそれを使用してきましたが、このテクニックに関するChet Haaseのコメントによると、一般的にはルールの親指ではないかもしれません。
元の答え
私が見つけた最良のアプローチは、デフォルトの背景をnullに設定し、各レイアウトで必要な背景を適用することです。
その理由は、テーマにデフォルトの背景を設定したり、上記のように背景が異なるさまざまなテーマを設定したりすると、レイアウト全体がその背景で塗りつぶされることになります。ほとんどの場合、ツールバー、ヘッダー、フッター、その他の要素の上にオーバードローの原因となるツールバー、ヘッダー、フッターなどの要素があるため、画面の100%を占める背景は必要ありません。
テーマにヌル背景を適用するには:
<style
name="ThemeName" parent="ParentTheme">
<item name="Android:windowBackground">@null</item>
</style>
オーバードローを確認するには、エミュレーター/デバイスのdevオプションのShow Overdrawオプションをアクティブにします。 100%lintの警告を信用しないでください。トラッカーには完全に修正されたとは思えないバグがいくつかあったためです。
この糸くずの警告が表示される理由は、アクティビティと線形レイアウトの両方が背景を描画しようとするためです。したがって、可視領域は2回描画されます。
これをデバッグする方法 sdk/tools/hierarchyviewerを実行し、ビュー階層を調べて、表示されていない背景を持つビューを確認します。 (Android dev build romを実行するデバイスが必要です)
内部で何が実行されていますか?ほとんどすべてのAndroidテーマには背景が指定されていることに注意してください。つまり、画面全体をカバーする「LinearLayout」を作成したい場合、バックラウンドでは、アクティビティのwindowBackground = "@ null"を設定するか、線形レイアウトの背景設定を削除することをお勧めします。