11

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

4

3 回答 3

18

我假设您使用提供android.support.v17.leanback.widget.RowHeaderPresenter的作为演示者HeaderFragment在您的BrowseFragment.

膨胀的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" />

如您所见,这使用了一个名为 的样式属性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>

然后通过MyCustomBrowseStyle在您Activity的.BrowseFragmentAndroidManifest.xml

于 2015-11-18T10:24:18.657 回答
6

除了大卫的回答。

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>

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()
}
于 2017-05-18T21:31:04.470 回答
4

david.mihola 的答案有助于颜色,但是我仍然在全局设置自定义字体时遇到问题。对于偶然发现这个问题并且对此感到困惑的每个人,这是我的解决方案:

感谢chrisjenx (Calligraphy)所做的出色工作,您可以轻松设置全局(自定义)字体。

只需将 Calligraphy 添加到您的 gradle.build 并将以下代码段添加到您的Application.onCreate()

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

并在每个活动中添加以下内容:

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

这已经为我在每个 TextView 上完成了字体技巧,而无需修改布局。书法的文献也提供了更多的可能性。一探究竟。

我希望这可以帮助其他发现此问题并尝试在全球范围内设置(自定义)字体的人。

于 2016-04-22T08:09:26.867 回答