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

我希望这将解决你的问题

+0

@ WOLF.L对它有帮助 –

+0

是的它的工作。谢谢@Sandeep –

试试这个,

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); 
+0

谢谢,但不工作 –

这为我工作 -

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

希望它能帮助。下面

+0

我试着用Spannable,SpannableString,SpannableStringBuilder。没有什么工作 –

+0

好吧,我使用'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); 
} 
+0

谢谢,但没有工作 –

尝试.append(),而不是.settext()

holder.tvFareAmount.append(spanText)