android-tv更改浏览片段行标题的文本颜色和字体
如何在浏览片段中更改行标题的文本颜色和字体? 文本不在菜单中,而是在行上方显示的文本。
我假设您使用提供的android.support.v17.leanback.widget.RowHeaderPresenter
作为您的BrowseFragment
。
RowHeaderPresenter
从R.layout.lb_row_header
RowHeaderPresenter
了布局,如下所示:
<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>
然后通过在AndroidManifest.xml
声明包含BrowseFragment
的Activity
使用MyCustomBrowseStyle
。
由david.mihola的答案有助于颜色,但我仍然有问题设置全球自定义字体。 对于这个问题的每一个人,谁也不解,这是我的解决方案:
感谢chrisjenx(书法)完成的杰出工作,您可以轻松设置全局(自定义)字体。
只需将书法添加到您的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的字体技巧,而无需修改布局。 书法文件也提供了更多的可能性。 一探究竟。
我希望这可以帮助其他人找到这个问题,并试图在全球设置(自定义)字体。
除了大卫的回答。
rowHeaderStyle
将样式应用于HeaderFragment
菜单项和HeaderFragment
行标题(这两个片段组成您的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
主题应用于AppTheme.Leanback.Browse.Row
中的活动。
3)将AppTheme.Leanback.Browse.Header
主题应用于AppTheme.Leanback.Browse.Header
中的标题:
// 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() }