根据用户在 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发送。
我目前有一个 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发送。