2017-03-08 3 views
1

J'ai une vue de recycleur et je veux changer la couleur de certaines parties du texte de textview.Android Spannable ne fonctionne pas dans l'adaptateur de vue recycleur

Voici mon code:

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

      } 
     } 
} 

Il ne change pas de couleur ou la taille du texte. Qu'est-ce que je fais mal??

Répondre

0

Salut je l'ai mis en œuvre la même chose et son travail pour moi . Vous devez faire une classe qui se prolongent ClickableSpan comme comme ci-dessous:

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

puis dans votre sur la méthode onBindViewHolder() vous devez écrire ce code comme ci-dessous

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

J'espère que cela résoudra votre problème

+0

@ WOLF.L est-il utile –

+0

Oui Son travail. Merci @Sandeep –

0

Essayez ceci,

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

Merci, mais ne fonctionne pas –

0

Cela a fonctionné pour moi -

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

Hope it helps.

+0

J'ai essayé avec Spannable, SpannableString, SpannableStringBuilder. Rien ne fonctionne –

+0

Très bien, je l'ai fait fonctionner avec 'StringBuilder'. Et cela fonctionne dans mon application. Essayez-le. – Wizard

0

utilisation ci-dessous pour atteindre votre objectif ...

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

Merci, mais ne fonctionne pas –

0

Essayez .append() au lieu de .settext()

holder.tvFareAmount.append(spanText)