ナビゲーションドロワー用にメニュー内の項目の横にアイコンを表示しようとしていますが、何らかの理由でアイコンが元の色(茶色)ではなく常に灰色で表示されます。アイコンの元の色を表示するためにこれを防ぐ方法はありますか?
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>
私はここで答えを見つけました: 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>
つかいます
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"
/>
私は自分のアプリのひとつで似たようなことを試した。はい、アイコンの色は変わりません。しかし、私は別の回避策でやることに成功しました。これが私の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);
そしてそれはうまくいっているようです。これが結果です。
あなたはそれが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 私は私のプロジェクトでそれをたくさん使います。
あなたが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);
Xmlに1行追加するだけ
app:itemIconTint="@color/white"
これを追加
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