I want to change title color(Hello Android TV!) and headeritem for row color(GridItemPresenter).
Asked
Active
Viewed 4,221 times
3
-
1This link might help you: http://stackoverflow.com/questions/33774150/android-tv-changing-text-color-and-font-of-browse-fragment-rows-header – abielita Jan 22 '17 at 14:37
-
Thanks,this link help. – KriK Jan 23 '17 at 08:35
-
Possible duplicate of [android-tv Changing text color and font of browse fragment rows header](http://stackoverflow.com/questions/33774150/android-tv-changing-text-color-and-font-of-browse-fragment-rows-header) – abielita Jan 23 '17 at 11:13
5 Answers
4
To change the list row header style you must use custom ListRowPresenter:
public class CustomListRowPresenter extends ListRowPresenter {
public CustomListRowPresenter() {
super();
setHeaderPresenter(new CustomRowHeaderPresenter());
}
}
public class CustomRowHeaderPresenter extends RowHeaderPresenter {
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
Presenter.ViewHolder viewHolder = super.onCreateViewHolder(parent);
RowHeaderView rowHeaderView = (RowHeaderView) viewHolder.view;
rowHeaderView.setTypeface(...);
rowHeaderView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, ...);
return viewHolder;
}
}
Haven't had any direct experience with BrowseFragment, but I expect there is some kind of a custom presenter too.

ULazdins
- 1,975
- 4
- 25
- 31
-
got ClassCastException for (RowHeaderView) viewHolder.view. Cannot convert RelativeLayout to RowHeaderView. Did I miss something? I am relatively new to Leanback :P – Krrishnaaaa Jan 27 '18 at 05:35
-
@Krrishnaaaa I suppose, the internal View hierarchy can change from Leanback version to version. I guess you need to explore the View tree and find where the RowHeaderView is (if it exists anymore). – ULazdins Jan 30 '18 at 13:58
-
Thanks.. but I am wondering if there is any option available to pass my custom view to this header? if there is, then it will be more optimal solution. And I am looking for that solution. – Krrishnaaaa Feb 02 '18 at 01:50
-
1I haven't check recently but I think that the answer is no. Leanback allows very little customization – ULazdins Feb 02 '18 at 14:30
-
-
For the latest Leanback versions, call the first children of the Viewholder's view to reach `RowHeaderView`. – Yekta Sarıoğlu Jan 14 '22 at 06:52
3
public class CustomListRowPresenter extends ListRowPresenter {
public CustomListRowPresenter() {
super();
setHeaderPresenter(new CustomRowHeaderPresenter());
}
}
class CustomRowHeaderPresenter extends RowHeaderPresenter {
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
HeaderItem headerItem = item == null ? null : ((Row) item).getHeaderItem();
RowHeaderPresenter.ViewHolder vh = (RowHeaderPresenter.ViewHolder) viewHolder;
TextView title = vh.view.findViewById(R.id.row_header);
if(!TextUtils.isEmpty(headerItem.getName())) {
title.setText(headerItem.getName());
title.setTextColor(ContextCompat.getColor(FiosTVApplication.getAppContext(),
R.color.white));
title.setTypeface(ResourcesCompat.getFont(title.getContext(), R.font.nhaasgroteskdsstd_bold));
title.setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
}
}
}

Shekhar Reddy
- 81
- 1
- 2
1
Another simple way to set color for header text is to override leanback color in xml:
<color name="lb_browse_header_color">#f00</color>
advantage/drawback: it set color for all headers.

LunaVulpo
- 3,043
- 5
- 30
- 58
0
Might be a bit late but for whosoever is still looking
<style name="AppTheme" parent="@style/Theme.AppCompat.Leanback">
<item name="rowHeaderStyle">@style/MediaHeader</item>
</style>
<style name="MediaHeader">
<item name="android:textAppearance">@style/MyMediaTextStyle</item>
</style>
<style name="MyMediaTextStyle">
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textSize">30sp</item>
<item name="android:textColor">@android:color/white</item>
</style>

humblerookie
- 4,717
- 4
- 25
- 40
0
Change rowHeaderStyle in your theme
<style name="Header" parent="Widget.Leanback.Header"> <item name="android:textAppearance">@style/YourApperance</item> </style>