2015-11-18 45 views

Odpowiedz

15

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.

3

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.

3

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

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