【问题标题】:How to set TextStyle of PagerTabStrip to Bold?如何将 PagerTabStrip 的 TextStyle 设置为粗体?
【发布时间】:2012-10-29 18:06:14
【问题描述】:

我在ViewPager 中使用PagerTabStrip 来显示每一页的标题。这是我的 XML 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@drawable/bg">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    >
    <android.support.v4.view.PagerTabStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:textColor="#a4c639"
            android:paddingTop="4dp"
            android:paddingBottom="4dp" />
    </android.support.v4.view.ViewPager>

</RelativeLayout>

我想在PagerTabStrip 中将 textStyle 设置为粗体,如下所示: android:textStyle="bold"。但这在PagerTabStrip 中是不可能的。似乎它只有 textcolor 文本属性。我可以通过什么方式将样式设置为粗体?

【问题讨论】:

  • 你在@style/TitleStripTextAppearance有什么?
  • @CommonsWare 哦,我在发布问题时忘记删除此行。我试图在@style/TitleStripTextAppearance 中添加样式,但我不确定这是否可行?

标签: android styles android-viewpager


【解决方案1】:

你需要做的是为文本创建一个样式,然后使用 android:textAppearance 属性...

大概是这样的:

 <style name="PagerTabStripText">
      <item name="android:textSize">14sp</item>
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">#a4c639</item>
 </style>

然后在您的 PagerTabStrip XML 中执行以下操作:

 <android.support.v4.view.PagerTabStrip
        android:id="@+id/pager_title_strip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="#33b5e5"
        android:paddingTop="4dp"
        android:paddingBottom="4dp" 
        android:textAppearance="@style/PagerTabStripText"/>

【讨论】:

  • 顺便说一下,eclipse 不会在 android.support.v4.view.PagerTabStrip 中自动建议 android:textAppearance。但不要对此感到困惑,textAppearance 适用于 PagerTabStrip。
  • 我需要为我的 pagertabstrip 使用自定义字体。知道如何使用它吗?
  • @Justin - textMultiLine 属性不能以这种方式工作。还有其他方法吗?
  • 关于如何专门设置中心选项卡标题的任何想法?比如,用户当前的标签标题会是粗体,其他的是正常的?
  • android studio 没有 textAppearance
【解决方案2】:

PagerTabStrip 不接受 textAppearance。

就像@Justin 上面说的,但是放在 xml 上:

style="@style/PagerTabStripText"

不是:

android:textAppearance="@style/PagerTabStripText"

【讨论】:

    【解决方案3】:

    如果您希望中心标签标题的样式与其他标签不同,那么您需要使用反射:

    try {
        final Class pagerTitleStripClass = PagerTitleStrip.class;
        final Field mCurrTextField = pagerTitleStripClass.getDeclaredField("mCurrText");
        mCurrTextField.setAccessible(true);
    
        // mTitle is my class's PagerTabStrip member variable
        final TextView mCurrText = (TextView) mCurrTextField.get(mTitle);
        mCurrText.setTypeface(Typeface.DEFAULT_BOLD);
    } catch (final Exception e) {
        Log.w(TAG, "Exception when styling currently selected title!", e);
    }
    

    不幸的是,当Android Support Library 的更新发布时,此解决方案可能不再起作用(因为这是PagerTitleStrip 类的来源)。特别是,此代码示例正在使用 revision 20

    【讨论】:

    • 我个人不建议对这些“技巧”使用反射。它是私有的是有原因的 - 它可能随时更改 - 即使在同一修订的不同提交期间也是如此。反射应该用于编写框架等元级别的东西。
    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2021-12-31
    • 2015-10-02
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多