首页 > 解决方案 > 如何以编程方式更改 Android TV 操作按钮文本颜色?

问题描述

val adapter = SparseArrayObjectAdapter()
    adapter.set(ACTION_PLAY_VIDEO, Action(ACTION_PLAY_VIDEO.toLong(), resources.getString(R.string.play_asset)))
    row.actionsAdapter = adapter

这是我在 AndroidTV 的 DetailPage 中的操作代码但我不知道如何以编程方式更改按钮文本颜色/按钮背景颜色,而不是在 xmls 中?

标签: android-tvleanback

解决方案


给你的适配器一个演示者。

在 Java 中:

adapter.setPresenterSelector(new ClassPresenterSelector()
    .addClassPresenter(Action.class, new Presenter() {

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

        @Override
        public void onBindViewHolder(ViewHolder viewHolder, Object item) {
            Button button = viewHolder.view.findViewById(R.id.my_button_id);
            //do stuff here, like
            button.setBackgroundColor(Color.BLUE);
            button.setTextColor(Color.RED);
            //or
            button.setOnFocusChangeListener((view, hasFocus) -> {
                if (hasFocus) {
                    //change color?
                }
            });
        }

        @Override
        public void onUnbindViewHolder(ViewHolder viewHolder) {
            //required override
        }

    })
);

推荐阅读