Android TV,如何更改标题和标题项颜色?

3
我想改变标题颜色(Hello Android TV!)和行的头部项(GridItemPresenter)的颜色。


1
这个链接可能会对你有所帮助:https://dev59.com/GVsX5IYBdhLWcg3wePZ5 - abielita
谢谢,这个链接很有帮助。 - KriK
5个回答

4
要改变列表行头的样式,您必须使用自定义的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;
    }
}

我对BrowseFragment没有直接的经验,但我认为应该有某种自定义 Presenter。


在 (RowHeaderView) viewHolder.view 上出现了 ClassCastException。无法将 RelativeLayout 转换为 RowHeaderView。我错过了什么吗?我对 Leanback 相对较新 :P - Krrishnaaaa
@Krrishnaaaa 我猜,内部的视图层次结构可能会从Leanback版本到版本发生变化。我想你需要探索View树,并找到RowHeaderView在哪里(如果它还存在的话)。 - ULazdins
谢谢,但我想知道是否有任何选项可以将我的自定义视图传递给此标题?如果有的话,那么它将是更优化的解决方案。我正在寻找这个解决方案。 - Krrishnaaaa
1
我最近没有检查过,但我认为答案是否定的。Leanback 允许非常少的自定义。 - ULazdins
谢谢,我也有同样的想法。 - Krrishnaaaa
对于最新的Leanback版本,请调用Viewholder视图的第一个子项以达到“RowHeaderView”。 - Yekta Sarıoğlu

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);
        }
    }
}

1

另一种简单的设置标题文本颜色的方法是在xml中覆盖leanback颜色:

<color name="lb_browse_header_color">#f00</color>

优点/缺点:它为所有标题设置颜色。

0

在您的主题中更改rowHeaderStyle

<style name="Header" parent="Widget.Leanback.Header"> <item name="android:textAppearance">@style/YourApperance</item> </style>


0

可能有点晚了,但是对于仍在寻找的人来说

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接