根据用户在 RecyclerView 中选择的选项为 ActionBar 标题设置不同的颜色

Setting different color for ActionBar title depending on what option the user has chosen in a RecyclerView

我目前有一个 Recycler 视图,当用户从视图中单击一个按钮时,它会转到一个新的 activity。我想将新 activity 的 Actionbar 中的标题设置为回收站视图中的颜色。因此,在下面的示例中,我希望能够将 'London Overground' 标题更改为与 Recycler 视图项目相同的颜色。

我有一个包含 RGB 颜色值的数组,它在我的 onBindViewHolder 方法中。我能够传递名称,只是颜色不正确。请在下面查看我的代码。

线路适配器

public class LineAdapter extends RecyclerView.Adapter<LineAdapter.LineViewHolder> {


    private List<Line> lineList;

    public LineAdapter(List<Line> lineList) {
        this.lineList = lineList;
    }

    @Override
    public LineViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.line_list_row, parent, false);

        return new LineViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(LineViewHolder holder, int position) {
        holder.lineName.setText(lineList.get(position).getLineName());
        holder.lineStatus.setText(lineList.get(position).getLineStatus());



        Integer[] colors = {Color.rgb(179, 99, 5),Color.rgb(227, 32, 23),Color.rgb(255, 211, 0),Color.rgb(0, 120, 42),Color.rgb(0, 164, 167),Color.rgb(243, 169, 187),Color.rgb(160, 165, 169),Color.rgb(238, 124, 14),Color.rgb(155, 0, 86),Color.rgb(0, 0, 0),Color.rgb(0, 54, 136),Color.rgb(113, 86, 165),Color.rgb(0, 152, 212),Color.rgb(149, 205, 186)};
        holder.lineName.setBackgroundColor(colors[position]);
    }

    @Override
    public int getItemCount() {
        return lineList.size();
    }

    public class LineViewHolder extends RecyclerView.ViewHolder {
        public TextView lineName;
        public TextView lineStatus;

        public LineViewHolder(View view) {
            super(view);
            lineName = (TextView) view.findViewById(R.id.lineName);
            lineStatus = (TextView) view.findViewById(R.id.lineStatus);
        }
    }
}

我的 onCLick 监听器

 recyclerView.addOnItemTouchListener(new touchListener(getApplicationContext(), recyclerView, new clickListener() {
            @Override
            public void onClick(View view, int position) {

              String a = ( lineList.get(position).getLineName());

                // Toast.makeText(line_activity.this, a, Toast.LENGTH_SHORT).show();
               Intent intent = new Intent(line_activity.this, line_info.class);
                intent.putExtra("string", a);
                startActivity(intent);
             }
            }
           )
        );

警告:不要创建方法变量,如果你想要带有颜色的 const 数组使你的数组​​常量使用 static final int[] 颜色; 建议:不要这样存储颜色,像

一样放在res/values/colors.xml
<color name="color1">#FFFFFF</color>

然后使用:

context.getColor(R.color.color1);

要使用可自定义的操作栏,请在您的 styles.xml 中将您的 AppTheme 样式设置为 parent .NoActionBar 而不是 DarkActionBar 或您现在拥有的样式。

在您的布局中,在所有内容之前放置一个工具栏,宽度为 match_parent,高度为 ?attr/actionBarSize。

在 activity 中,在展开布局后立即添加:

Toolbar toolbar = findViewById(R.id.yourToolbarId);
setSupporrActionBar(toolbar);

然后如果你想修改标题文字颜色使用

toolbar.setBackgroundColor(getColor(R.color.color1));

还有另一种方法可以通过使用 Html.fromHtml() 来设置文本颜色。您可以自定义文本。您可以在使用时设置文本颜色:

Bundle b=getIntent().getExtras();
String str=b.getString("string");
String color=b.getString("color");
getActionBar().setTitle(Html.fromHtml("<font color\""+color+"\">"+str+"</font>"));

这可能有助于设置文本颜色,它几乎适用于 android 中的所有文本。 因此,需要在RecyclerView中记录该行的颜色,然后通过intent发送。