2015-11-18 4 views

Antwort

15

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.

3

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.

3

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() 
} 
+1

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