我想讓所選標籤的文字爲粗體。我可以通過xml或java代碼來做到這一點,無論哪種方式更簡單。如何在使用tabLayout時更改選定選項卡的文本樣式?
5
A
回答
1
有加大膽編程使用Tab鍵CustomView,加載一個TextView成CustomView和TextView的應用樣式的方式:
private TabLayout mTabLayout;
protected void onCreate(Bundle savedInstanceState) {
...
mTabLayout = (TabLayout) findViewById(R.id.tablayout);
mTabLayout.setOnTabSelectedListener(new OnTabSelectedListener());
int tabCount = mTabLayout.getTabCount();
for (int i = 0; i < tabCount; i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab != null) {
TextView tabTextView =
(TextView) LayoutInflater.from(this).inflate(R.layout.tab_item, mTabLayout, false);
tabTextView.setText(tab.getText());
// First tab is the selected tab, so if i==0 then set Tabs_Selected style
tabTextView.setTextAppearance(getAppContext(), i == 0 ? R.style.TextAppearance_Tabs_Selected
: R.style.TextAppearance_Tabs);
tab.setCustomView(tabTextView);
}
}
}
class OnTabSelectedListener implements TabLayout.OnTabSelectedListener {
public void onTabSelected(TabLayout.Tab selectedTab) {
int tabCount = mTabLayout.getTabCount();
for (int i = 0; i < tabCount; i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
View tabView = tab != null ? tab.getCustomView() : null;
if (tabView instanceof TextView) {
((TextView) tabView).setTextAppearance(getAppContext(), selectedTab.equals(tab)
? R.style.TextAppearance_Tabs_Selected
: R.style.TextAppearance_Tabs);
}
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
這裏是在styles.xml中的條目:
<style name="TextAppearance.Tabs" parent="TextAppearance.Design.Tab">
<item name="android:textSize">12sp</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="TextAppearance.Tabs.Selected">
<item name="android:textStyle">bold</item>
</style>
這裏是佈局tab_item:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tab_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Tab 1" />
9
我改變了答案建議上面有點,它對我很好,沒有額外的.xml文件需要,希望它會有所幫助。
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
if (tab != null) {
TextView tabTextView = new TextView(this);
tab.setCustomView(tabTextView);
tabTextView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
tabTextView.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
tabTextView.setText(tab.getText());
// First tab is the selected tab, so if i==0 then set BOLD typeface
if (i == 0) {
tabTextView.setTypeface(null, Typeface.BOLD);
}
}
}
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
TextView text = (TextView) tab.getCustomView();
text.setTypeface(null, Typeface.BOLD);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
TextView text = (TextView) tab.getCustomView();
text.setTypeface(null, Typeface.NORMAL);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
1
如果使用默認TabLayout(不customView),您可以通過使用getChildAt()方法獲取標籤的TextView的。
.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
LinearLayout tabLayout = (LinearLayout)((ViewGroup) mMainTabs.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout.getChildAt(1);
tabTextView.setTypeface(tabTextView.getTypeface(), Typeface.BOLD);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
LinearLayout tabLayout = (LinearLayout)((ViewGroup) mMainTabs.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout.getChildAt(1);
tabTextView.setTypeface(tabTextView.getTypeface(), Typeface.NORMAL);
}
@Override
public void onTabReselected(TabLayout.Tab tab) { }
});
+2
這將字體設置爲粗體。但是在取消選擇時不會將其返回到正常字體? –
相關問題
- 1. Android:tabSelectedTextColor不會更改TabLayout中選定選項卡的文本
- 2. 更改TabLayout的選定選項卡背景和文本顏色
- 3. 如何更改tablayout中選定選項卡的顏色?
- 4. 如何更改TabLayout選定選項卡的圖標顏色?
- 5. 更改選項卡選擇選項卡時的文本顏色
- 6. 無法更改TabLayout中的選項卡
- 7. 更改TabLayout(android.support.design.widget)的選定選項卡指示器顏色
- 8. 如何使用TabLayout從Android代碼更改選定的選項卡文本顏色?
- 9. Ionic2選項卡 - 如何更改選定選項卡的顏色?
- 10. JavaFX CSS樣式:更改選定選項卡的高亮顏色
- 11. 在不更改選定選項卡的情況下動態更新TabLayout
- 12. 僅在選定模式下更改選定選項的文本
- 13. Android:在tabLayout上更改選項卡中的自定義視圖更改選項卡
- 14. 如何監聽TabLayout中的選項卡更改?
- 15. 更改TabLayout中的選項卡的選擇顏色
- 16. WPF TabItem樣式 - 更改標題文本後重畫選項卡
- 17. 如何在訪問者選項卡選擇元素時更改樣式?
- 18. 更改選定選項卡上的sherlock動作欄選項卡文本顏色
- 19. 如何在tablayout上更改選項卡時識別相同的選項卡或片段?
- 20. 使用FLEX 4動態更改TabBar中選定選項卡的樣式
- 21. 帶有文本和圖標的Android TabLayout更改選定選項卡上的文本和圖標的顏色
- 22. 使用Angular JS使用「required」時選擇選項樣式更改
- 23. 如何使用選擇選項更改div的樣式
- 24. 如何以編程方式更改選定的選項卡?
- 25. 如何使用Javascript修改瀏覽器選項卡的文本樣式?
- 26. 如何在wordpress中將文本選項卡更改爲html選項卡
- 27. Android TabLayout更新選項卡的視圖
- 28. TabLayout - 使用不同字體的選定選項卡
- 29. 如何在使用ViewPager滑動選項卡時更改選項卡指示符顏色和文本顏色?
- 30. 使用樣式表更改索引QTabBar選項卡的背景
我該如何在XML代碼中做到這一點? –