私はTabLayout
アンドロイドデザインライブラリから新しいものに取り組もうとしています。
タブのテキストをカスタム フォントに変更したい。で、スタイリングにまつわる物を探してみたのですが、これTabLayout
に行き着きました。
タブのテキスト フォントを変更する方法を教えてください。
私はTabLayout
アンドロイドデザインライブラリから新しいものに取り組もうとしています。
タブのテキストをカスタム フォントに変更したい。で、スタイリングにまつわる物を探してみたのですが、これTabLayout
に行き着きました。
タブのテキスト フォントを変更する方法を教えてください。
使用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を使用してアクションバータブのフォントスタイルを変更するを参照してください
次のメソッドは、フォント全体を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);
}
}
}
設計サポート 23.2.0 では、setupWithViewPager を使用して、コードを addTab(Tab tab) から addTab(Tab tab, boolean setSelected) に移動する必要があります。
ええと、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" />
それが役立つことを願っています:)
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>