android-tv更改浏览片段行标题的文本颜色和字体

pri*_*rit 9 android-tv leanback

如何在浏览片段中更改行标题的文本颜色和字体?文本不在菜单中,而是出现在行上方的文本.

dav*_*ola 18

提供我假设你正在使用android.support.v17.leanback.widget.RowHeaderPresenter的主持人为HeaderFragmentBrowseFragment.

RowHeaderPresenter布局从膨胀R.layout.lb_row_header,看起来像这样:

<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" />
Run Code Online (Sandbox Code Playgroud)

如您所见,这使用了一个名为的样式属性rowHeaderStyle,通常指向该属性@style/Widget.Leanback.Row.Header.你可以通过在你的下面添加以下内容来覆盖它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>
Run Code Online (Sandbox Code Playgroud)

然后MyCustomBrowseStyle用于通过在你的声明中声明它来Activity包含BrowseFragmentAndroidManifest.xml.


Squ*_*yMo 5

除了大卫的答案。

rowHeaderStyle将样式应用到中的菜单项HeaderFragment和中的行标题RowFragment(这两个片段组成BrowseFragment)。

如果您希望它们的样式(特别是字体颜色)不同,则可以覆盖BrowseFragment::onCreateHeadersFragment()并应用特定主题。

1)将这些样式添加到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>
Run Code Online (Sandbox Code Playgroud)

2)将AppTheme.Leanback.Browse.Row主题应用于清单中的活动。

3)将AppTheme.Leanback.Browse.Header主题应用于您的标题中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()
}
Run Code Online (Sandbox Code Playgroud)