130

私はTabLayoutアンドロイドデザインライブラリから新しいものに取り組もうとしています。

タブのテキストをカスタム フォントに変更したい。で、スタイリングにまつわる物を探してみたのですが、これTabLayoutに行き着きました。

タブのテキスト フォントを変更する方法を教えてください。

4

19 に答える 19

173

使用TabLayoutしていてフォントを変更したい場合は、次のように新しい for ループを以前のソリューションに追加する必要があります。

private void changeTabsFont() {
    ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
        int tabsCount = vg.getChildCount();
        for (int j = 0; j < tabsCount; j++) {
            ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);
            int tabChildsCount = vgTab.getChildCount();
            for (int i = 0; i < tabChildsCount; i++) {
                View tabViewChild = vgTab.getChildAt(i);
                if (tabViewChild instanceof TextView) {
                    ((TextView) tabViewChild).setTypeface(Font.getInstance().getTypeFace(), Typeface.NORMAL);
                }
        }
    }
} 

sherlockを使用してアクションバータブのフォントスタイルを変更するを参照してください

于 2015-06-26T07:28:11.487 に答える
16

次のメソッドは、フォント全体をViewGroup再帰的に変更します。の内部構造を気にする必要がないため、この方法を選択しましたTabLayout書道ライブラリを使用してフォントを設定しています。

void changeFontInViewGroup(ViewGroup viewGroup, String fontPath) {
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);
        if (TextView.class.isAssignableFrom(child.getClass())) {
            CalligraphyUtils.applyFontToTextView(child.getContext(), (TextView) child, fontPath);
        } else if (ViewGroup.class.isAssignableFrom(child.getClass())) {
            changeFontInViewGroup((ViewGroup) viewGroup.getChildAt(i), fontPath);
        }
    }
}
于 2016-04-22T14:59:40.043 に答える
10

設計サポート 23.2.0 では、setupWithViewPager を使用して、コードを addTab(Tab tab) から addTab(Tab tab, boolean setSelected) に移動する必要があります。

于 2016-03-07T18:37:43.463 に答える
7

ええと、23.4.0 ではループを使用せずにシンプルであることがわかりました。@ejw の提案に従って addTab(@NonNull Tab tab, boolean setSelected) をオーバーライドするだけです。

@Override
public void addTab(@NonNull Tab tab, boolean setSelected) {
    CoralBoldTextView coralTabView = (CoralBoldTextView) View.inflate(getContext(), R.layout.coral_tab_layout_view, null);
    coralTabView.setText(tab.getText());
    tab.setCustomView(coralTabView);

    super.addTab(tab, setSelected);
}

そして、ここにXMLがあります

<?xml version="1.0" encoding="utf-8"?>
<id.co.coralshop.skyfish.ui.CoralBoldTextView
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/custom_text"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:ellipsize="end"
   android:gravity="center"
   android:singleLine="true"
   android:textColor="@color/graylove"
   android:textSize="@dimen/tab_text_size" />

それが役立つことを願っています:)

于 2016-05-26T12:25:23.807 に答える
3
I think this is easier way.

<android.support.design.widget.TabLayout
   android:id="@+id/tabs"
   app:tabTextColor="@color/lightPrimary"
   app:tabSelectedTextColor="@color/white"
   style="@style/CustomTabLayout"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"/>
<style name="CustomTabLayout" parent="Widget.Design.TabLayout">
   <item name="tabMaxWidth">20dp</item>
   <item name="tabMode">scrollable</item>
   <item name="tabIndicatorColor">?attr/colorAccent</item>
   <item name="tabIndicatorHeight">2dp</item>
   <item name="tabPaddingStart">12dp</item>
   <item name="tabPaddingEnd">12dp</item>
   <item name="tabBackground">?attr/selectableItemBackground</item>
   <item name="tabTextAppearance">@style/CustomTabTextAppearance</item>
   <item name="tabSelectedTextColor">?android:textColorPrimary</item>
</style>
<style name="CustomTabTextAppearance" parent="TextAppearance.Design.Tab">
   <item name="android:textSize">16sp</item>
   <item name="android:textStyle">bold</item>
   <item name="android:textColor">?android:textColorSecondary</item>
   <item name="textAllCaps">false</item>
</style>
于 2018-08-17T15:30:09.097 に答える