2015-11-18 23 views

risposta

15

Si presume che si stia utilizzando il android.support.v17.leanback.widget.RowHeaderPresenter fornito come relatore per il HeaderFragment nel proprio BrowseFragment.

Il RowHeaderPresenter gonfia il layout da R.layout.lb_row_header che assomiglia a questo:

<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" /> 

Come si può vedere, questo utilizza un attributo di stile chiamato rowHeaderStyle, che è normalmente puntando @style/Widget.Leanback.Row.Header. È possibile ignorare questo mettendo quanto segue nel 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> 

e quindi utilizzare MyCustomBrowseStyle per la Activity contenente la BrowseFragment dichiarandolo nel vostro AndroidManifest.xml.

3

La risposta di david.mihola aiuta con il colore, tuttavia ho ancora avuto problemi con l'impostazione di un carattere personalizzato a livello globale. Per tutti coloro che si imbattono in questa domanda ed è perplessa anche su questo, ecco la mia soluzione:

Grazie al fantastico lavoro svolto da chrisjenx (Calligraphy), è possibile impostare facilmente un carattere globale (personalizzato).

sufficiente aggiungere al vostro Calligraphy gradle.build e aggiungere il seguente frammento al Application.onCreate():

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
         .setDefaultFontPath("fonts/MyCustomFont.ttf") 
         .setFontAttrId(R.attr.fontPath) 
         .build() 
     ); 

e in ogni attività aggiungere i seguenti:

@Override 
protected void attachBaseContext(Context newBase) { 
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
} 

Questo ha fatto il font-trick per me su ogni singola TextView, senza modificare i layout. La documentazione di Calligraphy offre anche altre possibilità. Controlla.

Spero che questo aiuti gli altri a trovare questa domanda e stiano cercando di impostare caratteri (personalizzati) a livello globale.

3

In aggiunta alla risposta di David.

rowHeaderStyle applica lo stile sia per le voci di menu in HeaderFragment e titoli di riga in RowFragment (questi due frammenti compongono il vostro BrowseFragment).

Se si desidera che i propri stili (in particolare i colori dei caratteri) siano diversi, è possibile ignorare lo BrowseFragment::onCreateHeadersFragment() e applicare un tema specifico a quel punto.

1) Aggiungi questi stili di 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) Applicare AppTheme.Leanback.Browse.Row tema per la vostra attività in manifesto.

3) Applicare AppTheme.Leanback.Browse.Header tema di intestazioni nella vostra 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

non riuscivo a trovare dove override per 'onCreateHeadersFragment'. Apparentemente stavo usando una versione precedente di leanback, questo metodo è stato recentemente aggiunto a 25.3.0. https://developer.android.com/reference/android/support/v17/leanback/app/BrowseFragment.html#onCreateHeadersFragment() – Hless