Jak zmienić kolor tekstu i czcionkę nagłówka wierszy w fragmencie przeglądania ?. Tekst nie jest w menu, ale tekst pojawia się nad wierszami.android-tv Zmiana koloru tekstu i czcionki nagłówka fragmentów fragmentów przeglądania
Odpowiedz
Zakładam, że używasz dostarczonego android.support.v17.leanback.widget.RowHeaderPresenter
jako prezentera dla HeaderFragment
w swoim BrowseFragment
.
RowHeaderPresenter
nadmuchuje układ z R.layout.lb_row_header
który wygląda tak:
<android.support.v17.leanback.widget.RowHeaderView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?rowHeaderStyle" />
Jak widać, ten korzysta z atrybutu stylu zwanego rowHeaderStyle
, zwykle wskazując @style/Widget.Leanback.Row.Header
. Można to zmienić poprzez wprowadzenie następujących w swojej styles.xml
:
<style name="MyCustomRowHeaderStyle" parent="Widget.Leanback.Row.Header">
<item name="android:textColor">@color/red</item>
</style>
<style name="MyCustomBrowseStyle" parent="Theme.Leanback.Browse">
<item name="rowHeaderStyle">@style/MyCustomRowHeaderStyle</item>
</style>
a następnie użyć MyCustomBrowseStyle
dla Activity
zawierającego BrowseFragment
deklarując go w AndroidManifest.xml
.
Odpowiedź david.mihola pomaga w kolorze, jednak wciąż miałem problemy z ustawieniem niestandardowej czcionki na całym świecie. Dla każdego, kto natknął się na to pytanie i jest z tego powodu zdziwiony, oto moje rozwiązanie:
Dzięki niesamowitej pracy wykonanej przez chrisjenx (Calligraphy), możesz łatwo ustawić czcionkę globalną (niestandardową).
Wystarczy dodać do swojej gradle.build Kaligrafia i dodaj następujący fragment do Application.onCreate()
:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MyCustomFont.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
iw każdym Aktywny dodać następujące:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
to zrobiła font-tricka dla mnie na każdym TextView, bez modyfikowania układów. Dokumentacja kaligrafii oferuje również więcej możliwości. Sprawdź to.
Mam nadzieję, że pomoże to innym osobom, które zadają to pytanie i próbują ustawić (niestandardowe) czcionki na całym świecie.
Oprócz odpowiedzi Davida.
rowHeaderStyle
stosuje styl zarówno do elementów menu w HeaderFragment
i tytułów wierszy w RowFragment
(te dwa fragmenty Skomponuj BrowseFragment
).
Jeśli chcesz, aby ich style (w szczególności kolor czcionki) były różne, możesz zastąpić BrowseFragment::onCreateHeadersFragment()
i zastosować konkretną kompozycję w tym miejscu.
1) Dodaj te style styles.xml
:
<style name="AppTheme.Leanback.Browse.Row" parent="@style/Theme.Leanback.Browse">
<item name="rowHeaderStyle">@style/AppTheme.Leanback.Row</item>
</style>
<style name="AppTheme.Leanback.Browse.Header" parent="@style/AppTheme.Leanback.Browse.Row">
<item name="rowHeaderStyle">@style/AppTheme.Leanback.Header</item>
</style>
<style name="AppTheme.Leanback.Row" parent="Widget.Leanback.Row.Header">
<item name="android:textColor">@color/font_row</item>
</style>
<style name="AppTheme.Leanback.Header" parent="Widget.Leanback.Row.Header">
<item name="android:textColor">@color/font_header</item>
</style>
2) Zastosuj AppTheme.Leanback.Browse.Row
motyw do działania w oczywisty.
3) Zastosuj AppTheme.Leanback.Browse.Header
motyw do nagłówków w swojej BrowseFragment
:
// Kotlin snippet
override fun onCreateHeadersFragment() : HeadersFragment {
class CustomHeadersFragment : HeadersFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return super.onCreateView(
inflater.cloneInContext(ContextThemeWrapper(inflater.context, R.style.AppTheme_Leanback_Browse_Header)),
container,
savedInstanceState
)
}
}
return CustomHeadersFragment()
}
nie mogę znaleźć, gdzie przesłanianie do 'onCreateHeadersFragment'. Najwyraźniej miałem starszą wersję Leanback, ta metoda została ostatnio dodana do wersji 25.3.0. https://developer.android.com/reference/android/support/v17/leanback/app/BrowseFragment.html#onCreateHeadersFragment() – Hless