我想将自定义字体应用于ActionBar上显示的应用标题。以前我没有使用任何支持库和这个解决方案:
int titleId = getResources().getIdentifier("action_bar_title", "id",
"android");
TextView yourTextView = (TextView) findViewById(titleId);
yourTextView.setTypeface(face);
对我来说很好。但是现在我使用材质设计SupportActionBar,这会抛出NullPointerException。那么如何在使用AppCompat时更改ActionBar字体?
答案 0 :(得分:6)
假设您已经成功使用AppCompat v22 +的新工具栏 并且您要在活动中导入android.support.v7.widget.Toolbar。
所以在你的OnCreate上你已经有了
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
此时你差不多完成了:
import 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) {
}
答案 1 :(得分:2)
使用工具栏代替ActionBar.follow以下步骤添加工具栏:
1.将您的应用主题更改为Theme.AppCompat.Light.NoActionBar
2.从“文件”菜单中选择项目结构,转到库依赖项,添加设计库并同步项目。
3.将您的布局转到要显示ActionBar的位置并写下代码:
<android.support.v7.widget.Toolbar
android:id="@+id/mytoolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/pccolor"
android:title="Services"
app:titleTextAppearance="@style/Toolbar.TitleText"
android:elevation="4dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Toolbar Title"
android:layout_gravity="center"
android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>
4.在活动中,写如下:
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);
试试这个希望这会对你有所帮助,如果有任何不妥之处请告诉我。
答案 2 :(得分:-2)
准备自定义布局,将文本视图放入action_bar_layout然后调用 actionbar.setcustomlayout()