更改 Leanback 库中 DetailsFragment 中操作按钮的默认 select 颜色

Changing the default select color of action buttons in DetailsFragment in Leanback Library

大家好,

我想详细更改操作按钮选择时出现的默认背景颜色的颜色fragment.Any想法如何实现?

您可以使用 Lean Back 库提供的 styles.xml 来做到这一点。

Follow the steps below first.

  1. 转到您的 sdk -> extras -> android -> support -> v17 -> leanback -> res -> values.

  2. 从那里将 styles.xml 文件复制到您当前的 Leanback 项目文件夹中。

  3. 现在您的项目中有了 style.xml 文件。

  4. 打开该文件并在下面找到 style

<style name="Widget.Leanback.DetailsActionButtonStyle" parent="Widget.Leanback.DetailsActionButtonStyleBase">

你可以在下面添加 属性 并且你会改变它的背景颜色。

<item name="android:background">@color/lb_speech_orb_recording</item>

我已经对此进行了测试,它正在运行,如果您遇到任何问题,请告诉我。

希望这能帮助您获得您所需要的。

换句话说,

可以这样设置DetailsOverviewRowPresenter

private void setupDetailsOverviewRowPresenter() {
    // Set detail background and style.
    DetailsOverviewRowPresenter detailsPresenter =
                new DetailsOverviewRowPresenter(new DetailsDescriptionPresenter());
    detailsPresenter.setBackgroundColor(getResources().getColor(R.color.details_fragment_background_color));
}

我不喜欢将 styles.xml 复制到我自己的项目中的想法。我这样做的方法是在 ArrayObjectAdapter 构造函数中提供一个自定义呈现器。当您不提供演示者时,DetailsOverviewRow 会为您插入一个默认演示者。

public class ActionPresenter extends Presenter {

  @Override public ViewHolder onCreateViewHolder(ViewGroup parent) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_action, parent, false);
    return new ViewHolder(v);
  }

  @Override public void onBindViewHolder(ViewHolder viewHolder, Object item) {
    Button button = (Button) viewHolder.view;
    Action action = (Action) item;

    button.setText(action.getLabel1());
  }

  @Override public void onUnbindViewHolder(ViewHolder viewHolder) {

  }
}

和custom_action.xml

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:lines="1"
    android:paddingStart="10dp"
    android:paddingEnd="10dp"
    android:includeFontPadding="false"
    android:background="@drawable/action_selector"
    style="?android:attr/borderlessButtonStyle"
    />

然后在详细信息片段中,您可以像使用任何其他片段一样使用它 adapter/presenter

ArrayObjectAdapter actionsAdapter = new ArrayObjectAdapter(new ActionPresenter());
    actionsAdapter.add(new Action(0, "Watch Now"));
    actionsAdapter.add(new Action(1, "More Info"));
    row.setActionsAdapter(actionsAdapter);