2017-09-26 4 views
1

J'ai un TabLayout avec des icônes qui sont teintées pour correspondre au thème (clair ou foncé) en utilisant l'attribut de thème textColorPrimary. Mais lorsque j'applique cette couleur à mes icônes TabLayout dans MainActivity, les icônes de la barre d'outils d'une autre activité changent également.TabLayout Icône Teinte Changement d'autres activités Barre d'icônes Icône Teinte

Les captures d'écran montrent que les icônes de TabLayout correspondent à celles de l'activité. Mais les icônes d'activité sont censées être blanches.

TabLayout Icônes: enter image description here

Seperate Activité Toolbar Icons enter image description here

Code pour la mise en TabLayout Icônes et texte Couleur:

 ColorStateList colors; 
    if (Build.VERSION.SDK_INT >= 23) { 
     colors = getResources().getColorStateList(color.tablayout_icon_colors, getTheme()); 
    } 
    else { 
     colors = getResources().getColorStateList(color.tablayout_icon_colors); 
    } 
    for (int i = 0; i < tabLayout.getTabCount(); i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     Drawable tabicon = tab.getIcon(); 
     CharSequence tabtitle = tab.getText(); 
     LinearLayout tabLayout2 = (LinearLayout)((ViewGroup) tabLayout.getChildAt(0)).getChildAt(tab.getPosition()); 
     TextView tabTextView = (TextView) tabLayout2.getChildAt(1); 
     if (tabicon != null) { 
      tabicon = DrawableCompat.wrap(tabicon); 
      DrawableCompat.setTintList(tabicon, colors); 
     } 
     if (tabtitle != null) { 
      tabTextView.setTextColor(colors); 
     } 
    } 

tablayout_icon_colors.xml

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="?attr/colorAccent" 
     android:state_selected="true" /> 
    <item android:color="?android:attr/textColorPrimary" /> 
</selector> 

Tout ce que j'ai dans l'activité séparée pour gonfler le menu est la suivante:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.preview, menu); 
    return true; 
} 
+0

Essayez ce lien https://stackoverflow.com/questions/26788464/how-to-change-color-of-the-back-arrow-in-the-new-material-theme –

Répondre

0

Le problème était que les icônes utilisées comme exemples dans la TabLayout étaient les mêmes icônes étirables que ceux de l'autre activité, et lorsque la teinte a été appliquée, elle a été appliquée à l'icône dessinable et pas seulement à la vue des icônes dans TabLayout. Le correctif consistait simplement à utiliser mes icônes prévues pour le TabLayout (différentes pour la flèche et l'icône de sauvegarde utilisées dans l'activité). Ainsi, les icônes dessinables de l'activité n'ont pas été affectées. Un peu stupide de moi mais hein.

0

Vous pouvez revenir la couleur de la flèche en utilisant l'icône ci-dessous le code;

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
<item name="android:textColorSecondary">@color/your_color_name</item> 
</style> 
+0

Ce n'est pas très utile car cela n'affecte pas la teinte des icônes et la teinte est déjà modifiée par programme. –

0

Vous pouvez utiliser un thème dans votre barre d'outils.

<android.support.v7.widget.Toolbar 
android:theme="@style/myToolbarTheme" 
... 
> 

Ensuite, dans votre thème vous pouvez définir l'attribut colorControlNormal:

<style name="myToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    .... 
    <item name="colorControlNormal">@color/myColor</item> 

+0

Cela ne fonctionne pas car la couleur de l'icône est définie par programme au démarrage et remplace le thème par défaut, donc rien ne se passe. –

+0

essayer ce lien https://stackoverflow.com/questions/26780046/menuitem-tinting-on-appcompat-toolbar/26817918#26817918 –