在操作栏上使用自定义字体

时间:2014-12-22 10:30:08

标签: android

我正在尝试更改操作栏标签上的字体,但我无法使其正常工作。我已经尝试了一些东西,这个看起来是最好的选择。不幸的是,这没有任何作用,字体保持不变。我也知道Typeface是好的,因为我在代码的其他部分使用它。这就是我所拥有的:

 actionBar = getActionBar();
 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    SpannableString s = new SpannableString("My Tab");
    Typeface tf = Typeface.createFromAsset(getAssets(), "my_font.ttf");
    s.setSpan(tf, 0, s.length(),
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    ActionBar.Tab myTab = actionBar.newTab();
    myTab.setText(s);
    myTab.setTabListener(this);

    actionBar.addTab(myTab);

任何人都知道怎么做?

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以通过定义新的Tab-Text-Style

来自定义选项卡的文本样式
<style name="TabTextStyle" parent="@style/Widget.AppCompat.ActionBar.TabText">
        <item name="android:textColor">@android:color/holo_blue_bright</item>
        <item name="android:textSize">14sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:fontFamily">sans-serif-light</item>
    </style>

现在像那样设置tabTextStyle

<style name="AppTheme" parent="AppBaseTheme">
        <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item>
        <item name="actionBarTabTextStyle">@style/TabTextStyle</item>
    </style>

答案 1 :(得分:0)

这是在操作栏中使用自定义文字的代码:

        ActionBar act = ((ActionBarActivity) getActivity()).getSupportActionBar();

        LayoutInflater inflator = LayoutInflater.from(getActivity());
        View v = inflator.inflate(R.layout.action_bar_custom, null);

        ((MyCustomTextView) v.findViewById(R.id.title_text)).setText(title);
        act.setCustomView(v);

在这种情况下,我们将自定义TextView放入普通布局中,我们将其设置为ActionBar中的视图,布局将如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ch.nuewsli.widget.TestoTextView 
    android:id="@+id/title_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textColor="@color/WHITE_TEXTCOLOR"
    android:textSize="18sp"
    android:lines="1"
    android:gravity="center_vertical"/>

</LinearLayout>

由于无法从xml(但只有字体系列)更改ActionBar字体,因此必须扩展TextView,强制它使用您的字体并将其放入{ {1}},请记住将您的字体复制到ActionBar文件夹中。 以下代码能够区分assetsTextView之间android:textStyle属性指定的bold的样式。

<强>更新 只需输入TextView的代码:

   public MyTextView(Context context, AttributeSet attrs, int defStyle) {
    this(context, attrs);
  }

  public MyTextView(Context context) {
    super(context);

    this.mContext = context;
    init();
 }

 public void init() {

    Typeface typeface = getTypeface();

    if(typeface != null)
        style = typeface.getStyle();

    if(style != Typeface.BOLD) {
        typeface = Typeface.createFromAsset(mContext.getAssets(), "My-Font-Regular.ttf");
    }else {
        typeface = Typeface.createFromAsset(mContext.getAssets(), "My-Font-Bold.ttf");
    }
    this.setTypeface(typeface);
}

答案 2 :(得分:-1)

你需要以编程方式进行吗?否则你可能会为它使用一个主题,但我注意到它的工作方式有所不同,具体取决于构建目标等。以下是一个示例:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/WorkoutLogActionBar</item>
    <item name="colorPrimary">#ffffa220</item>
</style>

<style name="WorkoutLogActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:titleTextStyle">@style/WorkoutLogActionBarTitleText</item>
    <item name="android:icon">@android:color/transparent</item>
</style>

<style name="WorkoutLogActionBarTitleText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textSize">@dimen/title_text_size</item>
    <item name="android:fontFamily">"sans-serif-light"</item>
</style>

这会在我的操作栏上更改标题中的字体,但似乎有一个:

<item name="android:actionBarTabTextStyle"></item>

希望这适用于您的构建目标版本,并且有所帮助。

祝你好运!