Android Spannable不能在回收站视图适配器中工作
我有一个回收站视图,想要更改某些部分textview文本的颜色。Android Spannable不能在回收站视图适配器中工作
这里是我的代码:
public class MyAdapter extends RecyclerView.Adapter<MyEarningsAdapter.ViewHolder> {
public ArrayList<WageItemDataSet> wageItemList;
private Context context;
private Spannable spanText;
private ForegroundColorSpan fcs;
private RelativeSizeSpan rss;
public MyAdapter(Context context) {
wageItemList = new ArrayList<>();
this.context = context;
fcs = new ForegroundColorSpan(Color.BLACK);
rss = new RelativeSizeSpan(0.8f);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_wage_list, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
WageItemDataSet item = wageItemList.get(position);
spanText = new SpannableString("Fare: "+item.totalFare);
spanText.setSpan(fcs, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanText.setSpan(rss, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.tvFareAmount.setText(spanText);
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tvFareAmount;
public ViewHolder(View itemView) {
super(itemView);
tvFareAmount = (TextView) itemView.findViewById(R.id.tvFareAmount);
tvFareAmount.setTypeface(openSansRegular);
}
}
}
它不会改变颜色或文本大小。我究竟做错了什么??
您好我已经实现了同样的事情,它的工作对我来说。你必须做一个类,如下扩展ClickableSpan喜欢它:在onBindViewHolder()方法
public class TextSpan extends ClickableSpan {
@Override
public void onClick(View widget) {
TextView tv = (TextView) widget;
Spanned s = (Spanned) tv.getText();
//int start = s.getSpanStart(this);
//int end = s.getSpanEnd(this);
}
}
,然后在你的,你必须编写代码如下
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("yourstring");
builder.setSpan(new TextSpan(), builder.length() -
comment.length(),builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.tvFareAmount.setText(content);
holder.tvFareAmount.setMovementMethod(LinkMovementMethod.getInstance());
我希望这将解决你的问题
试试这个,
WageItemDataSet item = wageItemList.get(position);
String value="Fare: "+item.totalFare;
Spannable spanText = new SpannableString(value);
spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 13,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(spanText);
谢谢,但不工作 –
这为我工作 -
StringBuilder captionBuilder = new StringBuilder();
captionBuilder.append(yourString);
SpannableStringBuilder commentBuilder = new SpannableStringBuilder(captionBuilder);
commentBuilder.setSpan(new ForegroundColorSpan(ContextCompat.getColor(mContext, R.color.your_color)), start, end, 0);
希望它能帮助。下面
我试着用Spannable,SpannableString,SpannableStringBuilder。没有什么工作 –
好吧,我使用'StringBuilder'工作。它在我的应用程序中工作。去尝试一下。 – Wizard
使用,以实现自己的目标......
public static void spanText(Context context, AppCompatAutoCompleteTextView editText, String replaceString) {
String event = editText.getHint().toString();
int startPos = event.indexOf(replaceString);
int endPos = startPos + replaceString.length();
Spannable spanText = Spannable.Factory.getInstance().newSpannable(editText.getHint());
spanText.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, R.color.dark_yellow)), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(spanText);
}
谢谢,但没有工作 –
尝试.append(),而不是.settext()
holder.tvFareAmount.append(spanText)
@ WOLF.L对它有帮助 –
是的它的工作。谢谢@Sandeep –