web-dev-qa-db-ja.com

上矢印の色を変更した後、プライベート警告としてマーク

アクションバーの戻る矢印のカスタム色を定義すると、警告が返されます。この警告を取り除くには何ができますか?

        final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
        actionBar.setHomeAsUpIndicator(upArrow);

リソース@ drawable/abc_ic_ab_back_mtrl_am_alphaは、com.Android.support:appcompat-v7でプライベートとしてマークされています

17
MacaronLover

理由は 公開するリソースの選択 を参照してください。

つまり、drawable/abc_ic_ab_back_mtrl_am_alphaはappcompat-v7のプライベートリソースであり、そのライブラリでonlyを使用することを目的としています。使用しないでください。

本当に使いたい場合は、プロジェクトにコピーしてください

16
lazybug

モハマドの代わりに

Android {
    lintOptions {
        disable 'PrivateResource'
    } 
}

私は以下を実行することをお勧めします。これはステートメントのローカル修正です。利点は、lint-checksをグローバルに非アクティブ化する必要がないことです(後で再びアクティブ化することを簡単に忘れることがあります)。

XMLの場合:

tools:ignore="PrivateResource"

コードの場合:

@SuppressLint("PrivateResource")

事実上、コードは次のようになります。

XML:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
    tools:ignore="PrivateResource" />

コード:

@SuppressLint("PrivateResource")
final Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
13
Freisturz

Androidこの投稿は、Android Open Source Project-Issue Tracker

同様の返信 問題

ここでの根本的な原因は、ライブラリが別のライブラリに依存している場合、依存しているライブラリからすべてのリソースを独自に宣言されたR.txt(AARファイル内)にインポートすることです。

ただし、これらの依存関係のpublic.txt宣言は含まれていないため、これらのシンボルは宣言されたものとして公開されますが、公開されません。民間。

2つの修正案を検討しています:

(1)ライブラリーのリソース可視性ルックアップで、依存関係からインポートされたシンボルを削除します(その依存関係が可視性情報を提供するかどうかにかかわらず)、または

(2)可視性ルックアップロジックを逆にします。シンボルが任意のライブラリでパブリックとして検出された場合、シンボルがどこでもプライベートとして宣言されている場合はそうであるという現在のロジックではなく、パブリックと見なします。

私は2で行くと思います。シンボルが最終的に下流のライブラリにインライン化されるシナリオを考えると、現在のロジックは意味がありません。

彼らが言ったように:

現時点での唯一の回避策は、プライベートリソースのlintチェックをオフにすることです。

    Android {
        lintOptions {
            disable 'PrivateResource'
        } 
    }

彼らはそれが修正されたと言っていますが、私は今日この問題を経験し、Android studio 1.5.1とgradle 1.5を使用しています

3
Mohammad

この答え で行われているように、Lintの抑制を可能な限りソースに近づけることを好みますが、それが機能しない場合は、抑制をlint.xmlにリストすることもできます。 appフォルダーにあるファイル。それは次のようになります:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
    <ignore path="<path-to-source>.<file-extension>"/>
</issue>

ここで、issue-idは抑制したいタイプです(例:UseSparseArrays)。 Android Studioもこのフィールドをオートコンプリートします。

0
fejd