Wie ändert man Textfarbe und Schriftart der Zeilenkopfzeile in Durchsuchen Fragment ?. Der Text nicht im Menü, sondern der Text, der über den Zeilen angezeigt wird.android-tv Ändern von Textfarbe und Schriftart von Durchsuchen Fragment-Header
Antwort
Ich nehme an, Sie verwenden die bereitgestellten android.support.v17.leanback.widget.RowHeaderPresenter
als Presenter für die HeaderFragment
in Ihrem BrowseFragment
.
Die RowHeaderPresenter
bläht das Layout von R.layout.lb_row_header
, die wie folgt aussieht:
<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" />
Wie Sie sehen können, dies wird ein Stil-Attribut namens rowHeaderStyle
, die normalerweise auf @style/Widget.Leanback.Row.Header
zeigt. Sie können dies umgehen, indem Sie die folgende in Ihrer styles.xml
setzen:
<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>
Und dann MyCustomBrowseStyle
für die Activity
verwenden, die die BrowseFragment
, indem sie es in Ihrem AndroidManifest.xml
erklärt.
Die Antwort von david.mihola hilft mit der Farbe, aber ich hatte immer noch Probleme mit der globalen Einstellung einer benutzerdefinierten Schriftart. Für alle, die über diese Frage stolpern und darüber ebenfalls verwirrt sind, hier ist meine Lösung:
Dank der tollen Arbeit von chrisjenx (Calligraphy) getan, können Sie einfach eine globale (benutzerdefinierte) Schriftart festlegen.
einfach Kalligraphie zu Ihrem gradle.build hinzufügen und die folgende Snippet zu Ihrer Application.onCreate()
hinzufügen:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MyCustomFont.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
und in jeder Aktivität fügen Sie die folgenden:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
Dies hat getan, um die font-Trick für mich auf jedem einzelnen TextView, ohne Layouts zu ändern. Die Dokumentation von Kalligraphie bietet auch einige weitere Möglichkeiten. Hör zu.
Ich hoffe, dies hilft anderen Menschen, die diese Frage finden und versuchen, (benutzerdefinierte) Schriftarten global festzulegen.
Zusätzlich zu Davids Antwort.
rowHeaderStyle
den Stil gilt sowohl für Menüpunkte in HeaderFragment
und Zeilentitel in RowFragment
(diese beiden Fragmente zusammensetzen Ihre BrowseFragment
).
Wenn Sie möchten, dass ihre Stile (insbesondere Schriftfarben) unterschiedlich sind, können Sie BrowseFragment::onCreateHeadersFragment()
überschreiben und an diesem Punkt ein bestimmtes Thema anwenden. In
1) styles.xml
diese Stile:
<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) AppTheme.Leanback.Browse.Row
Thema zu Ihrer Tätigkeit in manifest Nehmen.
3) Übernehmen AppTheme.Leanback.Browse.Header
Thema Header in Ihrem 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()
}
konnte ich nicht, wo Überschreibung 'onCreateHeadersFragment' finden. Offenbar hatte ich eine ältere Version von Lehnback, diese Methode wurde kürzlich zu 25.3.0 hinzugefügt. https://developer.android.com/reference/android/support/v17/leanback/app/BrowseFragment.html#onCreateHeadersFragment() – Hless