我正在尝试更改操作栏标签上的字体,但我无法使其正常工作。我已经尝试了一些东西,这个看起来是最好的选择。不幸的是,这没有任何作用,字体保持不变。我也知道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);
任何人都知道怎么做?
提前致谢
答案 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
文件夹中。
以下代码能够区分assets
与TextView
之间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>
希望这适用于您的构建目标版本,并且有所帮助。
祝你好运!