ナビゲーションドロワーアイテムアイコンが元の色を表示しない


138

ナビゲーションドロワーのメニュー内の項目の横にアイコンを表示しようとしていますが、何らかの理由でアイコンが常に元の色(茶色)ではなく灰色で表示されます。アイコンの元の色を表示するために、これを防ぐ方法はありますか?

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }
    }

    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();

                return true;
            }
        });
    }
}

引き出し_ビュー.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Section">
        <menu>
            <item
                android:id="@+id/navigation_item_1"
                android:icon="@drawable/ic_browncircle"
                android:title="Sub item 1" />
        </menu>
    </item>
</menu>

ここに画像の説明を入力してください


何が入ってるのic_browncircle
Ye Lin Aung

@YeLinAung「サブアイテム1」の横にある上のアイコンと同じように、灰色ではなく茶色の茶色の円。
MacaronLover、2015

たぶんあなたは.setColorFilter(MY_BROWN_COLOR)その見解を試すことができますか?
Ye Lin Aung、2015

以下の私の答えを見てください。
イェリンアウン2015

回答:


350

私はここで答えを見つけました:https : //stackoverflow.com/a/30632980/875249

リンクを簡単に回避するには、次のようにします。

    mNavigationView.setItemIconTintList(null);

これにより、すべての状態ベースの着色が無効になりますが、独自のリストを指定することもできます。それは私にとってはうまくいきました!

ここでは、カラーステートリストの作成に関する詳細を取得できますが、非常に単純です。http//developer.android.com/reference/android/content/res/ColorStateList.html

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:color="@color/primary" />
        <item android:state_checked="false" android:color="@android:color/white" />
    </selector>

うん、API 17を実行しているNexus 4でテストしました。AndroidMプレビューでもテストしました。ColorStateListはしばらく前から存在しており、NavigationViewはサポートライブラリの一部であるため、これがICSまで、そして場合によってはそれ以上に機能しない理由はわかりません。
クリス

11
これに代わるXMLはありますか?試したapp:itemIconTint="@null"が成功しなかった。
マンゲシュ2016

おかげで、私はこの問題に頭痛を取得し始めた
wax911

4
mNavigationView.setItemIconTintList(null);これは、私がずっと探していた答えです...
Jahid

1
セレクタはどこで使用しますか?
John Sardinha

49

使用する

    mNavigationView.setItemIconTintList(null);

それはそうです。また、すべてのアイコンが1つの配色(すべて白だった)の場合は、xmlファイルで設定できます-app:itemIconTint = "@ android:color / white"

私の場合:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:clickable="true"
    app:headerLayout="@layout/nav_header_main"
    app:itemTextColor="@android:color/white"
    app:menu="@menu/activity_main_drawer"
    android:background="@android:color/black"
    app:itemIconTint="@android:color/white"
    />


これはうまく機能し、mNavigationView.setItemIconTintList(null);すべてのアイコンからデフォルトのiconTintを削除します。アイコンが赤色の場合、アイコンは赤色で表示され、iconTintは適用されません。
Syed Hissaan

5

私は自分のアプリの1つで同様のことを試しました。そして、はい、アイコンの色は変わらないようです。しかし、私は別の回避策でなんとかしました。これが私のic_browncircle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    android:tint="@color/brown"
    >
  <size
      android:height="3dp"
      android:width="3dp"
      />
  <solid android:color="@color/brown"/>
</shape>

これはあなたに似ていると思いますが、効果はなく、色も変わりません。

だから私がやったことはこれです。

navigationView.getMenu()
    .findItem(R.id. navigation_item_1)
    .getIcon()
    .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);

そしてそれは働いているようです。結果は次のとおりです。

ここに画像の説明を入力してください


ロリポップ前についてはどうですか?
MacaronLover、2015

ロリポップ前のいくつかの解決策を試してきました。これまでのところ、まだ運がありません:(
Ye Lin Aung

4

Android Studio提供されているナビゲーションドロワーでプロジェクトを作成する場合。自分のメインActivityクラスでは、あなたは、単にコード行を追加することができnavigationView.setItemIconTintList(null);、あなたにonCreate方法。このような;

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 navigationView.setItemIconTintList(null); // <----- HERE
 setupDrawerContent(navigationView);

3

着色されたドローアブルを使用してみることができますが、それが5.0未満で機能するかどうかはわかりません。

ドローアブルを作成し、次のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_browncircle"
    android:tint="@color/brownColor"/>

そして、メニュー項目のドローアブルを先ほど作成したものに変更します。それがうまくいかない場合は、他の解決策はわかりません。あなたはこのライブラリを試すことができます:https : //github.com/mikepenz/MaterialDrawer私は自分のプロジェクトでよく使用しています。


このメソッドはAPI 17(4.2)では機能しません。その理由(少なくとも私の経験では)は、テーマを明るく設定すると、ナビゲーションドロワーが自動的に白いアイコンを黒い色合いでオーバーレイするためです。テーマから光を取り除くと、アイコンが意図したように白に戻ります。
クリス


1

このコードが MainActivity.javaを機能させない方法

                NavigationView.setItemIconTintList(null); // not working

使用できます。

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
   navigationView.setNavigationItemSelectedListener(this); 
   navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.