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

时间:2017-11-06 21:05:06

标签: android android-recyclerview recycler-adapter recyclerview-layout

我目前有一个Recycler View,当用户点击视图中的按钮时,它会转到一个新活动。我想将新活动的Actionbar中的Title设置为recycleler视图中的颜色。因此,在下面的示例中,我希望能够将“London Overground”标题更改为与Recycler视图项相同的颜色。 enter image description here

我有一个数组,它保存RGB颜色值,这是在我的onBindViewHolder方法中。我能够通过名称,而不是正确的颜色。请参阅下面的代码。

LineAdapter

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

2 个答案:

答案 0 :(得分:1)

警告:不要创建方法变量,如果你想要带有颜色的const数组,那么使用static final int [] colors会使你的数组​​保持不变; 推荐:不要存储这样的颜色,将它们放在res / values / colors.xml中,如

<color name="color1">#FFFFFF</color>

然后使用:

context.getColor(R.color.color1);

要使用可自定义的操作栏,请在styles.xml中创建AppTheme风格的父级.NoActionBar而不是DarkActionBar或现在拥有的内容。

在你的布局中放置一个工具栏,其中包含match_parent的宽度和?attr / actionBarSize的高度。

在活动中,在充气布局后添加此权限:

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

然后,如果要修改标题文字颜色,请使用

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

答案 1 :(得分:0)

还有另一种使用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中记录行的颜色,然后通过意图发送它。