Как изменить шрифт заголовка ActionBar при использовании AppCompat
Я хотел бы применить собственный шрифт к названию моего приложения, которое отображается в ActionBar. Раньше я не использовал библиотеку поддержки и это решение:
int titleId = getResources().getIdentifier("action_bar_title", "id",
"android");
TextView yourTextView = (TextView) findViewById(titleId);
yourTextView.setTypeface(face);
работал отлично для меня. Но теперь я использую материальный дизайн SupportActionBar, и это вызывает исключение NullPointerException. Итак, как изменить шрифт ActionBar при использовании AppCompat?
Ответы
Ответ 1
Предполагая, что вы уже успешно используете новую панель инструментов AppCompat v22 +
и что вы импортируете файл 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
Используйте панель инструментов вместо ActionBar. Следуйте инструкциям ниже, чтобы добавить панель инструментов:
1. измените тему приложения на Theme.AppCompat.Light.NoActionBar
Структура проекта 2.Goto из меню "Файл", зависимостей библиотеки goto, добавления библиотеки дизайна и синхронизации вашего проекта.
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);
Попробуйте это. Надеюсь, это поможет вам, если что-то не так, пожалуйста, дайте мне знать.
Ответ 3
подготовить пользовательский макет, поместить текстовое представление в action_bar_layout, а затем вызвать
actionbar.setcustomlayout()