2017-09-26 7 views
1

textColorPrimaryテーマ属性を使用して、テーマ(明るいまたは暗い)と一致するように色付けされたアイコン付きのTabLayoutがあります。しかし、私のMainActivityのTabLayoutアイコンにこの色合いを適用すると、異なるアクティビティのツールバーアイコンも変わります。TabLayout Icon Tintその他のアクティビティを変更するActionbar Icon Tint

スクリーンショットは、TabLayoutのアイコンがアクティビティ内のアイコンの色と一致することを示しています。しかし、活動アイコンは白であることを意味する。

TabLayoutアイコン: enter image description here

TabLayoutアイコンとテキストの色を設定するための洗面所独立活動ツールバーアイコン enter image description here

コード:

 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> 

私はメニューを膨らませるために別々の活動を持っているすべてはこれです:

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

このリンクを試すhttps://stackoverflow.com/questions/26788464/how-to-change-color-of-the-back-arrow-in-the-new-material-theme –

答えて

0

問題がTabLayoutで例として使用されているアイコンは、中のものと同じで描画可能なアイコンだったということでした色が適用されたときに、TabLayout内のアイコンのビューだけでなく、アイコン描画可能領域に適用されました。

修正点は、単に実際の意図したアイコンをTabLayout(矢印とは異なるもの)で使用し、アクティビティで使用されたアイコンを保存することでした。アクティビティの描画可能アイコンには影響しません。私の何だかばかだけど、ええ。

0

あなたはコードの下に使用して矢印アイコンの色をバックに変更することができます。

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

これはあまり役に立ちません。それはアイコンの色合いには影響しませんし、色合いはすでにプログラム的にオーバーライドされています。 –

0

ツールバーのテーマを使用できます。

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

次に、あなたのテーマであなたがcolorControlNormal属性を定義することができます。

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

+0

アイコンの色合いが起動時にプログラムによって設定され、既定のテーマを上書きするため、何も起こりませんので、これは機能しません。 –

+0

このリンクを試すhttps://stackoverflow.com/questions/26780046/menuitem-tinting-on-appcompat-toolbar/26817918#26817918 –