【问题标题】:How to make TabLayout Custom Font , Custom color如何制作 TabLayout 自定义字体,自定义颜色
【发布时间】:2017-08-24 09:03:17
【问题描述】:

我正在寻找具有以下自定义行为的 TabLayout

  • 自定义字体
  • 选择和取消选择选项卡时文本颜色发生变化
  • 选择和取消选择选项卡时的粗体和正常字体
  • 默认情况下,第一个选项卡应选择粗体文本

我附上了我尝试过的以下代码sn-p。

1) 我创建了名为 FundayTabLayout 的自定义视图

<com.knackv.custom.view.FundayTabLayout
    android:id="@id/dashboard_tab_layout"
    style="@style/AppTabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabTextAppearance="@style/AppTabTextAppearance"></com.knackv.custom.view.FundayTabLayout>

2) 我用过的样式

<style name="AppTabLayout" parent="Widget.Design.TabLayout">
    <item name="tabMaxWidth">@dimen/size_in_150_dp</item>
    <item name="tabIndicatorColor">@color/app_background</item>
    <item name="tabBackground">@drawable/tab_background_color_selector</item>
    <item name="tabTextAppearance">@style/AppTabTextAppearance</item>
    <item name="tabSelectedTextColor">@color/app_blue</item>
</style>

<style name="AppTabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="android:textColor">@color/white</item>
    <item name="android:textSize">@dimen/size_in_15_dp</item>
    <item name="textAllCaps">false</item>
</style>

3) 设置我的自定义字体:

 @Override
public void setupWithViewPager(@Nullable ViewPager viewPager) {
    super.setupWithViewPager(viewPager);

    this.removeAllTabs();

    ViewGroup slidingTabStrip = (ViewGroup) getChildAt(0);
    for (int i = 0, count = viewPager.getAdapter().getCount(); i < count; i++) {
        Tab tab = this.newTab();
        this.addTab(tab.setText(viewPager.getAdapter().getPageTitle(i)));
        AppCompatTextView view = (AppCompatTextView) ((ViewGroup) slidingTabStrip.getChildAt(i)).getChildAt(1);
        view.setAllCaps(false);
        view.setTypeface(Utility.getNormalTypeFace());
    }
}

请为我提供此问题的最佳解决方案。

【问题讨论】:

  • 为什么这个问题被否决了?如果 SO 已经为这个问题提供了完美的解决方案,请告诉我......

标签: android material-design android-xml android-tablayout


【解决方案1】:
Typeface fontTypeFace = Typeface.createFromAsset(getAssets(), "OpenSans-Semibold.ttf");

    for (int i = 0; i < tabLayout.getChildCount(); ++i) {
        View nextChild = tabLayout.getChildAt(i);
        if (nextChild instanceof TextView) {
            TextView textViewToConvert = (TextView) nextChild;
            textViewToConvert.setTypeface(fontTypeFace);
        }
    }

试试这个

【讨论】:

    【解决方案2】:

    https://stackoverflow.com/a/31067431/5726971 检查这个..它主要是为了android设计支持TabLayout。 https://stackoverflow.com/a/33284990/5726971 如果像您的情况一样使用自定义 TabLayout,则此选项会添加到第一个答案中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2020-06-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多