我想更改详细信息片段中操作按钮选择时出现的默认背景颜色的颜色。知道如何实现相同的效果吗?
3 回答
我不喜欢将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"
/>
然后在详细信息片段中,您可以像使用任何其他适配器/演示器一样使用它
ArrayObjectAdapter actionsAdapter = new ArrayObjectAdapter(new ActionPresenter());
actionsAdapter.add(new Action(0, "Watch Now"));
actionsAdapter.add(new Action(1, "More Info"));
row.setActionsAdapter(actionsAdapter);
您可以使用库styles.xml
提供的它来执行此操作Lean Back
。
Follow the steps below first
.
转到您的
sdk
->extras
->android
->support
->v17
->leanback
->res
->values
。从那里将
styles.xml
文件复制到您当前的leanback项目文件夹中。现在你
style.xml
的项目中有文件了。打开该文件并在下面找到
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));
}