1. 程式人生 > >TabLayout.Tab設定文字+icon

TabLayout.Tab設定文字+icon

mTabLayout.addTab(mTabLayout.newTab().setText("Tab1"));
mTabLayout.addTab(mTabLayout.newTab().setText("Tab2"));

可如果Tab中既有文字,又有icon,且icon需要Tab的狀態而改變,就比較麻煩了。我們可以使用SpannableString結合ImageSpan來實現。

    /**
     * 獲取第三個tab的內容,其本質是把文字與icon結合在一起
     *
     * @param title 第三個tab欄需要顯示的內容
     * @return
     */
public CharSequence getThirdTabTitle(String title) { Drawable image = getResources().getDrawable(R.drawable.bg_down_arrow); image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); // Replace blank spaces with image icon SpannableString sb = new SpannableString(title + " "
); ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); sb.setSpan(imageSpan, title.length(), title.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return sb; }

這樣可以獲取Tab需要顯示的文字內容,進而通過setText (CharSequence text)方法設定顯示內容。
或者根據不同的點選狀態,直接設定Tab

    /**
     * 設定第三個tab的內容
     *
     * @param isTabSelected 第三個tab是否被點選
     */
public void setThirdTab(boolean isTabSelected) { String title = ""; //根據此時的tradingType來設定第三個tab欄的文字 if (tradingType == -1) { title = "分類"; } else { title = content[tradingType]; } Drawable image; //根據第三個tab欄是否點選,設定不同的箭頭方向 if (isTabSelected) { image = getResources().getDrawable(R.drawable.down_arrow_press); } else { image = getResources().getDrawable(R.drawable.down_arrow_normal); } image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); // Replace blank spaces with image icon SpannableString sb = new SpannableString(title + " "); ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); sb.setSpan(imageSpan, title.length(), title.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mTabLayout.getTabAt(2).setText(sb); }