TabLayout.Tab設定文字+icon
阿新 • • 發佈:2019-02-10
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);
}