2017-12-15 4 views
0

BottomNavigationView Original icon color 同じアイコンの色を維持することができます。しかし、アイコンが選択されていて、選択されていないタブに対して異なる灰色の色を保っている場合に限り、それを保持することは可能ですか? これは私のアイコンの色を変更するためのコードです。 state_checkedでここBottomNavigationオリジナルのアイコンの色をチェックしたり、チェックしたりしないでください。

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item 
    android:color="@color/colorSecondary" 
    android:state_checked="true"/> 
<item 
    android:color="#bebebe" 
    android:state_checked="false"/> 

私は@nullを与えてみましたが、それはただのアイコンがピンクがかっなります。私はそれがチェックされているときにアイコンの色を保持したい。出来ますか?

注:bNavigationView.setIconTintList(null)を使用しても試してみました。すべてのアイコンの色が元の色に変わります。

public class MainActivity extends AppCompatActivity { 
Toolbar toolbar; 
BottomNavigationView bNavigationView; 
BottomNavigationView.OnNavigationItemSelectedListener 
mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     switch (item.getItemId()) { 
      case R.id.navigation_account: 
// AS gives me an error here saying setItemIconTintList cannot be applied to (int,null) 
       bNavigationView.setItemIconTintList(0,null); 
       fragmentTransaction.replace(R.id.content,new AccountFragment()).commit(); 
       break; 
      case R.id.navigation_technical: 
       fragmentTransaction.replace(R.id.content,new TechnicalEventsFragment()).commit(); 
       break; 
      case R.id.navigation_corporate: 
       fragmentTransaction.replace(R.id.content,new CorporateEventsFragment()).commit(); 
       break; 
      case R.id.navigation_cultural: 
       fragmentTransaction.replace(R.id.content,new CulturalEventsFragment()).commit(); 
       break; 
      case R.id.navigation_dashboard: 
       fragmentTransaction.replace(R.id.content,new DashboardFragment()).commit(); 
       break; 
     } 

     return true; 
    } 

}; 
+0

をonNavigationItemSelectedことを行うことができます@ color/colorSecondary "' – vm345

+0

state_checkedで色を指定しないと、まだピンク色のように見えます。 – sanjeev

答えて

0

私はこれが古い質問です知っているが、誰のために、彼らが使用してこのメ​​ソッドをアイコンの色を保持し、 setItemIconTintList(ColorStateListの色合い)をnullに設定したいこの

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_checked="true" android:color="@color/colorSecondary"/> 
     <item android:color="#bebebe" /> 
    </selector> 
+0

私はすでにそれを試み、私の質問で引用した。私はstate_checkedをcolorSecondaryにしたくありません。私はアイコンの元の色が欲しいです。 – sanjeev

+0

android:color = "@ color/colorSecondary"を削除してみてください –

+0

@ color/colorSecondaryを削除するとアイコンがピンク色に変わります。 – sanjeev

0

を試してみてください - セットメニューアイコンに適用される色合い。

これは最も簡単な方法は、それを試してみると、私は

bNavigationView = (BottomNavigationView) 


findViewById(R.id.bottom_navigation); 
bNavigationView.setItemIconTintList(null); 

これはそれを行うための最もエレガントな超高速な方法ですが知っているようです。 「=色:

予告:nullに設定setItemIconTintListは、アイコンの全体の色合いの色を削除しますが、uは特定のアイコン ため、この効果が必要な場合は、 `アンドロイドを使用している理由uが内部

bNavigationView.setOnNavigationItemSelectedListener(new 
    BottomNavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 


       switch (item.getItemId()) { 

        case R.id.iconOne: 
       bNavigationView.setIconTintList(0,null); 

     replaceFragment(FirstFragment.newInstance(),"FragmentOne");        
        break; 
        case R.id.mySpecificIcon: 
       //setIconTintList taking to params the first 
       //is the position of the icon wich is array starts from  
       //0  

       bNavigationView.setIconTintList(1,null); 

       replaceFragment(FirstFragment.newInstance(),"Fragment2"); 


         // mainViewPager.setCurrentItem(3); 
         break; 


       } 
       return true; 
      } 
     }) 
+0

こんにちはMohamad ..私はすでにそれを試みました..それは、デフォルトのアイコンのすべての色を変更します。選択したアイコンを元の色で表示し、残りをグレー#で表示したい場合 – sanjeev

+0

更新された回答を見るSanjeev私はそれをテストしました。もしあなたと一緒にいなかったらそれをテストしました –

+0

こんにちはモハマド。 AndroidスタジオでbNavigationView.setIconTintList(0、null)を使用するとエラーが表示されます。 – sanjeev

関連する問題