android-tv 更改浏览片段行的文本颜色和字体 header
android-tv Changing text color and font of browse fragment rows header
如何更改浏览片段中行 header 的文本颜色和字体?。
文本不在菜单中,而是显示在行上方的文本。
我假设您在 BrowseFragment
.
中使用提供的 android.support.v17.leanback.widget.RowHeaderPresenter
作为 HeaderFragment
的演示者
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>
然后通过在 AndroidManifest.xml
.
中声明包含 BrowseFragment
的 Activity
使用 MyCustomBrowseStyle
david.mihola 的回答对颜色有帮助,但是我在全局设置自定义字体时仍然遇到问题。对于偶然发现这个问题并且对此也感到困惑的每个人,这是我的解决方案:
感谢 chrisjenx (Calligraphy) 所做的出色工作,您可以轻松设置全局(自定义)字体。
只需将 Calligraphy 添加到您的 gradle.build 并将以下代码段添加到您的 Application.onCreate()
:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MyCustomFont.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
并在每个 Activity 中添加以下内容:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
这已经为我在每个 TextView 上完成了字体技巧,而无需修改布局。书法的文档也提供了更多的可能性。看看吧。
我希望这对发现这个问题并尝试全局设置(自定义)字体的其他人有所帮助。
除了大卫的回答。
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
主题应用到清单中的 activity。
3) 在 BrowseFragment
:
中将 AppTheme.Leanback.Browse.Header
主题应用到 headers
// 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()
}
如何更改浏览片段中行 header 的文本颜色和字体?。 文本不在菜单中,而是显示在行上方的文本。
我假设您在 BrowseFragment
.
android.support.v17.leanback.widget.RowHeaderPresenter
作为 HeaderFragment
的演示者
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>
然后通过在 AndroidManifest.xml
.
BrowseFragment
的 Activity
使用 MyCustomBrowseStyle
david.mihola 的回答对颜色有帮助,但是我在全局设置自定义字体时仍然遇到问题。对于偶然发现这个问题并且对此也感到困惑的每个人,这是我的解决方案:
感谢 chrisjenx (Calligraphy) 所做的出色工作,您可以轻松设置全局(自定义)字体。
只需将 Calligraphy 添加到您的 gradle.build 并将以下代码段添加到您的 Application.onCreate()
:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MyCustomFont.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
并在每个 Activity 中添加以下内容:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
这已经为我在每个 TextView 上完成了字体技巧,而无需修改布局。书法的文档也提供了更多的可能性。看看吧。
我希望这对发现这个问题并尝试全局设置(自定义)字体的其他人有所帮助。
除了大卫的回答。
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
主题应用到清单中的 activity。
3) 在 BrowseFragment
:
AppTheme.Leanback.Browse.Header
主题应用到 headers
// 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()
}