2017-02-13 7 views
13

クリック可能なRecyclerviewアイテムを実装し、クリック効果のためにandroid:background="?selectableItemBackground"を設定しましたが、コードを調べてこのリントの問題を発見しました。可能なオーバードロー:背景もペイントして背景を塗りつぶすテーマの背景要素を塗りつぶす

リント警告: 可能なオーバードロー:ルート要素も背景

にこの警告を解決するための任意のアイデアをペイントテーマとした背景?selectableItemBackground塗料?

私のxml:名前は、ウィンドウの背景を暗示するよう

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?selectableItemBackground" 
    android:clickable="true" 
    android:orientation="vertical" 
    android:padding="@dimen/row_padding"> 

    //... 
</LinearLayout > 
+0

@nibariusこのレイアウトをリサイクラの表示アイテムとして使用することがわかっている場合は、警告を無視してください。またはそれを抑制する。 –

+0

@EugenPechanec賞金はまだ開いていますので、さまざまなオプションについて説明する回答で賞金を請求​​することができます(警告を抑制し、バックグラウンドをアクティビティから削除し、フォアグラウンドで波紋効果を設定します)。 – nibarius

答えて

4

のリップルを置く必要があり、テーマは、指定する指定android:windowBackground属性を持っていますあなたの活動が開始されています。

この糸くずの警告は、ちょうど次を示しています:

ねえ!あなたのテーマにはwindowBackgroundが適用されており、のルートレイアウトは、ウィンドウの背景を無意味にするために、ウィンドウの背景の上に他の描画可能なものを描くので、不必要にピクセルをオーバードローします。

windowBackgroundをヌル・アウトすることは文句を言わないように糸くずになるだろう:

<style name="AppTheme" parent="..."> 
    ... 
    <item name="android:windowBackground">@null</item> 
</style> 
+1

これは、アプリケーション全体でウィンドウの背景を削除するでしょうか?あなたがほしいと思った時に少し劇的なことは、あなたの1つのRecyclerViewのアイテムに波及効果があることです。私のアプリでwindowBackroundをnullに設定すると、そこにRecyclerViewがないので変更したくない例えば設定アクティビティのバックグラウンドが削除されます:https:// imgur。com/a/bbHhZ – nibarius

+1

'これは、アプリケーション全体でウィンドウの背景を削除するでしょうか? 'あなたがすべてのアクティビティに同じテーマを設定した場合 - はい。しかし、ベーススタイルの子孫であるスタイルを持つことができ、必要なすべてのアクティビティのテーマとしてそれを適用し、残りのすべてに基本テーマを残します。あなたは基本的に「なぜこれが起こり、どうやってこれを修正するのか」という質問をしました。 - 'windowBackground'はあなたの質問に対する答えです。 – azizbekian

+0

質問をしたのは私のものではありませんでした。私が質問を投稿したならば、おそらく、このリント問題を引き起こさずにRecyclerViewアイテムに波及効果を与えることができるのでしょうか。しかし、それがどうして起こるのかは分かりません。 – nibarius

0

あなたはデフォルトではフォアグラウンド属性

+0

これは、セレクタをテキストの下に置くかテキストの上に置くかによって異なります。これは設計上の選択です。したがって、セレクタは必要な場所に配置する必要があります。プラス 'android:foreground'は' FrameLayout'でのみサポートされています。他のビューはマシュマロの後でしかそれをサポートしない。 –

+0

これは何らかの方法で警告に影響しません(これはオーバードローに関するものです) – mbonnin

0

私はちょうど糸くずのチェックを外します。ほとんどのアプリでx1のオーバードローをするのは完全に容認されます。

Romain Guyのオーバードローとパフォーマンスに関する投稿があります。http://www.curious-creature.com/2012/12/01/android-performance-case-study/

あなたのテーマに設定されている<item name="android:windowBackground">@null</item>は、あなたのアクティビティの開始アニメーションが削除されるため間違っています(起動アニメーションの詳細については、その投稿を参照してください:https://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/)。あなたはそうしてはいけません。

Activity.onCreate()のgetWindow().setBackgroundDrawable(null)を設定することはできますが、塗りつぶす背景がなくなるため、アプリ内のすべてのピクセルが少なくとも1回塗りつぶされていることを確認する必要があります。非常に限られた利益のために潜在的に危険です。

+0

まず、あなたがリンクを張った投稿にアニメーションについて何も述べていません。第二に、 'windowBackground'はアクティビティのアニメーションとは関係がありません。これはウィンドウの背景です。第3に、なぜそれをしない能力があるときに1倍のオーバードローを残すアドバイスですか?第四に、なぜあなたは、OPのアクティビティがランチャ活動であると頼んでいると思いますか?アプリフロー中の通常のアクティビティではありませんか? – azizbekian

+0

Romain Guyの投稿から: 'ウィンドウの背景を削除する:あなたのテーマに定義されている背景は、アプリケーションが起動するときにプレビューウィンドウを作成するためにシステムによって使用されます。アプリケーションが透過的でない限り、nullに設定しないでください。これは私が打ち上げアニメーションと呼んでいるものです(ホームランチャーからのものでなくても、どこからでもかまいません)。 1倍のオーバードローで、それを取り除く時間を費やすことは、あなたのユーザーの誰も気づかないので、私の目には少し時間が無駄です。しかし、あなたが最高のパフォーマンスを望んでおり、あなたのアプリデザインがそれを可能にしたいなら、それを自由にしてください。 – mbonnin

関連する問題