android-tv изменение цвета текста и шрифта заголовка строк фрагмента обзора
Как изменить цвет текста и шрифт заголовка строк в фрагменте обзора?. Текст не в меню, а текст, который появляется над строками.
3 ответов
я предполагаю, что вы используете, предусмотренного 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
содержащий BrowseFragment
by объявление его в вашем AndroidManifest.xml
.
ответ Дэвид.михола помогает с цветом, однако у меня все еще были проблемы с настройкой пользовательского шрифта по всему миру. Для всех, кто натыкается на этот вопрос и озадачен этим, вот мое решение:
благодаря удивительной работе chrisjenx (каллиграфия), вы можете легко установить глобальный (пользовательский) шрифт.
просто добавьте каллиграфию к вашему gradle.создайте и добавьте следующий фрагмент 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
и названия строк в 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()
}