使用 AppCompat 时如何更改 ActionBar 标题字体
Posted
技术标签:
【中文标题】使用 AppCompat 时如何更改 ActionBar 标题字体【英文标题】:How to change ActionBar title font when using AppCompat 【发布时间】:2015-03-01 16:23:30 【问题描述】:我想将自定义字体应用于显示在 ActionBar 上的应用标题。以前我没有使用任何支持库和这个解决方案:
int titleId = getResources().getIdentifier("action_bar_title", "id",
"android");
TextView yourTextView = (TextView) findViewById(titleId);
yourTextView.setTypeface(face);
对我来说效果很好。但是现在我正在使用材料设计 SupportActionBar,这会引发 NullPointerException。那么在使用 AppCompat 时如何改变 ActionBar 字体呢?
【问题讨论】:
这个回复我想你能帮忙***.com/a/15181195/2778639 @user27799 谢谢,这篇文章解决了我的问题。如果有人和我有类似的问题,只需使用链接帖子中的方法,它适用于支持库 v-21。 这里有解决方案,[Actionbar 自定义设计。][1] [1]:***.com/questions/17966350/… 【参考方案1】:假设您已经成功使用 AppCompat v22+ 的新工具栏 并且您正在 Activity 中导入 android.support.v7.widget.Toolbar。
所以在你的 OnCreate 上你应该已经有了
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
到这里你就差不多完成了:
导入 java.lang.reflect.field;
并添加以下行:
TextView yourTextView = null;
try
Field f = toolbar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
yourTextView = (TextView) f.get(toolbar);
yourTextView.setTypeface(face);
catch (NoSuchFieldException e)
catch (IllegalAccessException e)
【讨论】:
为我工作。谢谢【参考方案2】:使用 Toolbar 代替 ActionBar。按照以下步骤添加工具栏:
1.将您的应用主题更改为Theme.AppCompat.Light.NoActionBar
2.从文件菜单转到项目结构,转到库依赖项,添加设计库并同步您的项目。
3.转到您要显示ActionBar的布局并编写以下代码:
<android.support.v7.widget.Toolbar
android:id="@+id/mytoolbar"
android:layout_
android:layout_
android:background="@color/pccolor"
android:title="Services"
app:titleTextAppearance="@style/Toolbar.TitleText"
android:elevation="4dp">
<TextView
android:layout_
android:layout_
android:text="Toolbar Title"
android:layout_gravity="center"
android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>
4.在Activity中写如下:
Toolbar mytoolbar=(Toolbar)findViewById(R.id.mytoolbar);
setSupportActionBar(mytoolbar);
自定义标题字体:
fontPath = "Fonts/Roboto-Light.ttf";
Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), fontPath);
TextView tv_ins=(TextView)FindViewById(R.id.toolbar_title);
tv_ins.setText("mytitle");
tv_ins.setTypeface(tf);
试试这个希望对你有帮助,如果有什么问题请告诉我。
【讨论】:
【参考方案3】:准备自定义布局,将文本视图放入 action_bar_layout 然后调用 actionbar.setcustomlayout()
【讨论】:
以上是关于使用 AppCompat 时如何更改 ActionBar 标题字体的主要内容,如果未能解决你的问题,请参考以下文章
如何使用主题和 Theme.AppCompat.DayNight 更改操作栏中的文本颜色
如何更改工具栏导航和溢出菜单图标(appcompat v7)?