Come modificare il colore del testo e il carattere dell'intestazione delle righe nel frammento di ricerca ?. Il testo non nel menu ma il testo che appare sopra le righe.android-tv Cambiare il colore del testo e il carattere dell'intestazione delle righe del file di ricerca
risposta
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
.
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.
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()
}
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