Android Spannable TextView – TechPaliyal

En spændbar TextView kan bruges i Android til at fremhæve en bestemt del af tekst med en anden farve, stil,
størrelse og / eller klik på begivenhed i en enkelt TextView-widget.

Overvej at du har defineret en TextView som følger:

TextView textview=findViewById(R.id.textview);

Derefter kan du anvende forskellige fremhævninger på det som vist nedenfor:

Spannbar farve: For at indstille en anden farve til en del af teksten kan en ForegroundColorSpan være
anvendt, som vist i følgende eksempel:

Spannable spannable = new SpannableString(firstWord + lastWord);
spannable.setSpan(new ForegroundColorSpan(firstWordColor), Zero, firstWord.size(),
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(lastWordColor), firstWord.size(),
    firstWord.size() + lastWord.size(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(spannable);

Output oprettet af ovenstående kode:

Spannable skrifttype: For at indstille en anden skriftstørrelse til en del af teksten, kan en RelativeSizeSpan være
anvendt, som vist i følgende eksempel:

Spannable spannable = new SpannableString(firstWord + lastWord);
spannable.setSpan(new RelativeSizeSpan(1.1 f), Zero, firstWord.size(),
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // set measurement
spannable.setSpan(new RelativeSizeSpan(Zero.eight f), firstWord.size(), firstWord.size() +
    lastWord.size(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // set measurement
textview.setText(spannable);

Output oprettet af ovenstående kode:

Spannable skrifttype: For at indstille en anden skrifttype til en del af teksten, en brugerdefineret
TypefaceSpan kan bruges som vist i følgende eksempel:

Spannable spannable = new SpannableString(firstWord + lastWord);
spannable.setSpan(new CustomTypefaceSpan("SFUIText-Daring.otf", fontBold), Zero,
    firstWord.size(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new CustomTypefaceSpan("SFUIText-Common.otf", fontRegular),
    firstWord.size(), firstWord.size() + lastWord.size(),
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textual content.setText(spannable);

For at få ovennævnte kode til at fungere skal klassen CustomTypefaceSpan imidlertid afledes fra
klassen TypefaceSpan. Dette kan gøres som følger:

public class CustomTypefaceSpan extends TypefaceSpan 
    personal remaining Typeface newType;
    public CustomTypefaceSpan(String household, Typeface kind) 
        tremendous(household);
        newType = kind;
    
    @Override
    public void updateDrawState(TextPaint ds) 
        applyCustomTypeFace(ds, newType);
    
    @Override
    public void updateMeasureState(TextPaint paint) 
        applyCustomTypeFace(paint, newType);
    
    personal static void applyCustomTypeFace(Paint paint, Typeface tf) 
        int oldStyle;
        Typeface outdated = paint.getTypeface();
        if (outdated == null)  else 
        int faux = oldStyle & ~tf.getStyle();
        if ((faux & Typeface.BOLD) != Zero) 
            paint.setFakeBoldText(true);
        
        if ((faux & Typeface.ITALIC) != Zero) 
            paint.setTextSkewX(-Zero.25 f);
        
        paint.setTypeface(tf);