2016-09-13 17 views

答えて

4

これはどうやって行うべきではありません。そのようなあなたのタブを作成します

1. API 21+唯一のソリューション

mTabLayout = (TabLayout) findViewById(R.id.tab_layout); 
for (int i = 0; i < 4; ++i) { 
    TabLayout.Tab tab = mTabLayout.newTab(); 
    tab.setIcon(R.drawable.icon); 
    mTabLayout.addTab(tab, i); 
} 
TabLayoutStateListDrawableを作成するための2つの方法があります StateListDrawable

からstate_selectedに基づいてアイコンを選択することができます

R.drawable.iconは、状態ドロアブルである:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/drawable_unselected" android:state_selected="false"/> 
    <item android:drawable="@drawable/drawable_selected" android:state_selected="true"/> 
</selector> 

R.drawable.drawable_unselectedはあなたのイメージであり、R.drawable.drawable_selectedは、次のようになります。残念ながら、描画可能なXMLでandroid:tintbitmap内部タグがAPI 21に導入された

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap 
      android:src="@drawable/drawable_unselected" 
      android:tint="@color/answer_color"/> 
    </item> 
</layer-list> 

2. API 4+互換性のあるソリューション

低いAPIでは、プログラム的な解決策が必要です。

mTabLayout = (TabLayout) findViewById(R.id.tab_layout); 
for (int i = 0; i < 4; ++i) { 
    TabLayout.Tab tab = mTabLayout.newTab(); 
    StateListDrawable stateDrawable = new StateListDrawable(); 
    Drawable unSelectedDrawable = ContextCompat.getDrawable(this, R.drawable.drawable_unselected); 
    Drawable selectedDrawable = createdSelectedDrawable(this, R.drawable.drawable_unselected); 
    stateDrawable.addState(new int[]{-android.R.attr.state_selected}, unSelectedDrawable); 
    stateDrawable.addState(new int[]{android.R.attr.state_selected}, selectedDrawable); 
    tab.setIcon(stateDrawable); 
    mTabLayout.addTab(tab, i); 
} 

state_selectedを作成するための機能::

private Drawable createdSelectedDrawable(Context context, int iconResource) { 
    Bitmap one = BitmapFactory.decodeResource(getResources(), iconResource); 
    Bitmap oneCopy = Bitmap.createBitmap(one.getWidth(), one.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(oneCopy); 
    Paint p = new Paint(); 
    p.setColorFilter(new PorterDuffColorFilter(ContextCompat.getColor(context, android.R.color.holo_red_dark), PorterDuff.Mode.SRC_ATOP)); 
    c.drawBitmap(one, 0, 0, p); 
    return new BitmapDrawable(getResources(), oneCopy); 
} 

はここで以前のコードを変更します

関連する問題