3

I want to change title color(Hello Android TV!) and headeritem for row color(GridItemPresenter).

Yurets
  • 3,999
  • 17
  • 54
  • 74
KriK
  • 41
  • 2
  • 6
  • 1
    This 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 Answers5

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
  • 1
    I haven't check recently but I think that the answer is no. Leanback allows very little customization – ULazdins Feb 02 '18 at 14:30
  • Thanks, I had same thought. – Krrishnaaaa Feb 04 '18 at 10:47
  • 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>