Zgadzam się, że nie jest to w pełni obsługiwane, ale oto co zrobiłem. Możesz użyć niestandardowego widoku dla paska akcji (będzie wyświetlany między ikoną a elementami akcji). Korzystam z widoku niestandardowego i mam wyłączony natywny tytuł. Wszystkie moje działania dziedziczą po jednym działaniu, które ma ten kod w onCreate:
this.getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflator = LayoutInflater.from(this);
View v = inflator.inflate(R.layout.titleview, null);
//if you need to customize anything else about the text, do it here.
//I'm using a custom TextView with a custom font in my layout xml so all I need to do is set title
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());
//assign the view to the actionbar
this.getActionBar().setCustomView(v);
A mój układ xml (R.layout.titleview w powyższym kodzie) wygląda następująco:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<com.your.package.CustomTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:textSize="20dp"
android:maxLines="1"
android:ellipsize="end"
android:text="" />
</RelativeLayout>
Możesz to zrobić za pomocą niestandardowej
TypefaceSpan
klasy. Jest lepszy odcustomView
podejścia wskazanego powyżej, ponieważ nie psuje się podczas korzystania z innych elementów paska akcji, takich jak rozwijanie widoków akcji.Zastosowanie takiej klasy wyglądałoby mniej więcej tak:
Do
TypefaceSpan
klasy niestandardowej przekazywany jest kontekst działania i nazwa kroju pisma wassets/fonts
katalogu. Ładuje plik i buforuje noweTypeface
wystąpienie w pamięci. Pełna implementacjaTypefaceSpan
jest zaskakująco prosta:Po prostu skopiuj powyższą klasę do swojego projektu i zaimplementuj ją w
onCreate
metodzie działania, jak pokazano powyżej.źródło
textAllCaps
atrybut jest ustawiony na true w bazowym TextView (np. Poprzez motyw), czcionka niestandardowa nie pojawi się. Był to dla mnie problem, kiedy zastosowałem tę technikę do elementów zakładki paska akcji.assets/fonts/
. Jeśli po prostu wrzucić pliki .ttf / .OTF w aktywach, a nie w podkatalogu, należy zmodyfikować poniższy wiersz kodu odpowiednio:String.format("fonts/%s", typefaceName)
. Straciłem dobre 10 minut, próbując to rozgryźć. Jeśli tego nie zrobisz, otrzymaszjava.lang.RuntimeException: Unable to start activity ComponentInfo{com.your.pckage}: java.lang.RuntimeException: native typeface cannot be made
źródło
Od Android Support Library v26 + Android Studio 3.0 proces ten stał się prosty jak błyskawica !!
Wykonaj następujące kroki, aby zmienić czcionkę tytułu paska narzędzi:
res > font
zgodnie Fonts w XMLW
res > values > styles
wklej następujące ( użyj tutaj swojej wyobraźni! )Wstaw nowy wiersz we właściwościach paska narzędzi Toolbar,
app:titleTextAppearance="@style/TextAppearance.TabsFont"
jak pokazano poniżejCiesz się stylem czcionki niestandardowego tytułu Actionbar !!
źródło
Kaligrafia let Biblioteki ustawić czcionkę niestandardową przez app motywu, który będzie również zastosowanie do paska akcji.
Aby aktywować kaligrafię, wystarczy dołączyć ją do kontekstu działania:
Domyślny atrybut niestandardowy to
fontPath
, ale możesz podać własny atrybut niestandardowy dla ścieżki, inicjując go w klasie aplikacji za pomocąCalligraphyConfig.Builder
. Stosowanieandroid:fontFamily
zostało zniechęcone.źródło
To brzydki hack, ale możesz to zrobić w następujący sposób (ponieważ action_bar_title jest ukryty):
Ten kod dotyczy urządzeń post GINGERBREAD, ale można go łatwo rozszerzyć, aby działał również z paskiem akcji Sherlock
PS Na podstawie komentarza @pjv istnieje lepszy sposób na znalezienie identyfikatora tytułu paska akcji
źródło
Poniższy kod będzie działał dla wszystkich wersji. Sprawdziłem to w urządzeniu z piernikiem, a także w urządzeniu JellyBean
źródło
użyj nowego paska narzędzi w bibliotece wsparcia, zaprojektuj pasek akcji jako własny lub użyj kodu poniżej
Nadmuchiwanie widoku tekstu nie jest dobrą opcją. Wypróbuj narzędzie do tworzenia ciągów znaków Spannable
skopiuj poniżej klasy
źródło
źródło
typeface.ITALIC
sięTypeface.ITALIC
nie mieć ostrzeżenie użytkownika statyczneJeśli chcesz ustawić krój pisma dla wszystkich widoków tekstu w całym działaniu, możesz użyć czegoś takiego:
I TypefaceCache:
źródło
Właśnie wykonałem następujące czynności w funkcji onCreate ():
Korzystam z bibliotek wsparcia, jeśli ich nie używasz, myślę, że powinieneś przełączyć się na getActionBar () zamiast getSupportActionBar ().
W Android Studio 3 możesz dodać niestandardowe czcionki, postępując zgodnie z tymi instrukcjami https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html, a następnie użyj nowo dodanej czcionki w „ font_to_be_used "
źródło
Aby dodać do odpowiedzi @ Sam_D, musiałem to zrobić, aby działało:
Wygląda to na przesadę - dwukrotne odwołanie się do v.findViewById (R.id.title)) - ale to jedyny sposób, w jaki pozwoliłbym to zrobić.
źródło
Aby zaktualizować poprawną odpowiedź.
po pierwsze: ustaw tytuł na false, ponieważ używamy widoku niestandardowego
po drugie: utwórz titleview.xml
Wreszcie:
POBIERZ PLIK FONTOWY: ponieważ przechowuję plik w chmurze, więc mam na nim link do pobrania.
źródło
Nie jest wymagany niestandardowy widok tekstu!
Najpierw wyłącz tytuł na pasku narzędzi w kodzie Java: getSupportActionBar (). SetDisplayShowTitleEnabled (false);
Następnie po prostu dodaj TextView do paska narzędzi:
źródło
Spróbuj użyć tego
źródło
Aby to osiągnąć, musimy użyć refleksji
źródło
SPRÓBUJ TEGO
źródło