根据位置或标志更改颜色文本视图
Change color textview based on position or flag
我已经根据数组值动态创建了文本视图。
显示正常。我的问题是
如果假设我的数组中有 5 个值以及标志值(即 0 和 1)
如果我点击 textview 索引 2,它包含标志“0”意味着以红色显示,而包含“1”的索引需要以绿色显示。
如何实现?我已经尝试了很多。
for (int i = 0; i < array.size(); i++) {
final TextView textView = new TextView(Activity.this);
int parentLayoutHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
Constants.DRAWER_LIST_ITEM_LAYOUT_HEIGHT_DIP, getResources().getDisplayMetrics());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, parentLayoutHeight);
params.setMargins(0, 0, 0, 20);
textView.setLayoutParams(params);
textView.setText(array.get(i).getOptions());
textView.setTag(array.get(i).getFlag());
textView.setId(Integer.parseInt(array.get(i).getId()));
textView.setGravity(Gravity.CENTER);
textView.setTypeface(Typeface.SANS_SERIF);
textView.setPadding(0, 20, 0, 20);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Constants.DRAWER_LIST_ITEM_TEXT_SIZE_SP);
textView.setBackgroundResource(R.drawable.rounded_rectangle_1);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setTextColor(getResources().getColor(R.color.white));
for (int i = 0; i < array.size(); i++) {
if (parsedAnswers.get(i).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
}
}
});
mLayout.addView(textView);
}
根据你的例子:
public void onClick(View v) {
textView.setTextColor(getResources().getColor(R.color.white));
for (int i = 0; i < array.size(); i++) {
if (parsedAnswers.get(i).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
}
}
我认为你需要的是textview的标签,而不是做一个链接到parsedAnswers的循环,比如:
String tag = (String)textView.getTag();
if (tag.equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
如果你的数组是动态变化的,你只能像这样设置里面的位置:
textView.setTag(i);
并在监听器中
int position = (Integer)textView.getTag();
if (parsedAnswers.get(position).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
还可以使用 textView.setTextColor(color)
来更改文本颜色而不是背景颜色
我已经根据数组值动态创建了文本视图。
显示正常。我的问题是 如果假设我的数组中有 5 个值以及标志值(即 0 和 1)
如果我点击 textview 索引 2,它包含标志“0”意味着以红色显示,而包含“1”的索引需要以绿色显示。
如何实现?我已经尝试了很多。
for (int i = 0; i < array.size(); i++) {
final TextView textView = new TextView(Activity.this);
int parentLayoutHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
Constants.DRAWER_LIST_ITEM_LAYOUT_HEIGHT_DIP, getResources().getDisplayMetrics());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, parentLayoutHeight);
params.setMargins(0, 0, 0, 20);
textView.setLayoutParams(params);
textView.setText(array.get(i).getOptions());
textView.setTag(array.get(i).getFlag());
textView.setId(Integer.parseInt(array.get(i).getId()));
textView.setGravity(Gravity.CENTER);
textView.setTypeface(Typeface.SANS_SERIF);
textView.setPadding(0, 20, 0, 20);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Constants.DRAWER_LIST_ITEM_TEXT_SIZE_SP);
textView.setBackgroundResource(R.drawable.rounded_rectangle_1);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setTextColor(getResources().getColor(R.color.white));
for (int i = 0; i < array.size(); i++) {
if (parsedAnswers.get(i).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
}
}
});
mLayout.addView(textView);
}
根据你的例子:
public void onClick(View v) {
textView.setTextColor(getResources().getColor(R.color.white));
for (int i = 0; i < array.size(); i++) {
if (parsedAnswers.get(i).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
}
}
我认为你需要的是textview的标签,而不是做一个链接到parsedAnswers的循环,比如:
String tag = (String)textView.getTag();
if (tag.equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
如果你的数组是动态变化的,你只能像这样设置里面的位置:
textView.setTag(i);
并在监听器中
int position = (Integer)textView.getTag();
if (parsedAnswers.get(position).getFlag().equalsIgnoreCase("0")){
textView.setBackgroundResource(R.drawable.rounded_rectangle_red);
}else{
textView.setBackgroundResource(R.drawable.rounded_rectangle_green);
}
还可以使用 textView.setTextColor(color)
来更改文本颜色而不是背景颜色