web-dev-qa-db-ja.com

ナビゲーションドロワ項目アイコンに元の色が表示されない

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

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;
            }
        });
    }
}

drawer_view.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>

enter image description here

120
MacaronLover

私はここで答えを見つけました: 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>
302
Chris

つかいます

    mNavigationView.setItemIconTintList(null);

それはそうです。また、一つの配色であなたのすべてのアイコン(私はすべて白を持っていた場合)あなたは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"
    />
42
Chuck

私は自分のアプリのひとつで似たようなことを試した。はい、アイコンの色は変わりません。しかし、私は別の回避策でやることに成功しました。これが私の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);

そしてそれはうまくいっているようです。これが結果です。

enter image description here

5
Ye Lin Aung

あなたはそれが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 私は私のプロジェクトでそれをたくさん使います。

3
Austin Hodak

あなたがAndroid Studioが提供したナビゲーションドロワーでプロジェクトを作成するならば。 Main Activityクラスでは、このコード行navigationView.setItemIconTintList(null);onCreateメソッドに追加するだけです。このような;

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

Xmlに1行追加するだけ

app:itemIconTint="@color/white"

1
Harsh Singhal

これを追加

 Android:tint="@color/colorPrimary"

いくつかのこのコードが機能しない 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
0
Parban