0

Я хочу, чтобы установить три различных размера текста в одном TextView как как ниже образец изображения, enter image description hereКак установить три различных TEXTSIZE в одном TextView в андроида

Я попытался с Html, как как ниже,

StringBuilder fontString = new StringBuilder(); 

    fontString.append("<small>"); 
    fontString.append("1.78"); 
    fontString.append("</small>");  
    fontString.append("<big><b>"); 
    fontString.append("33"); 
    fontString.append("</b></big>");   
    fontString.append("<sup>"); 
    fontString.append("<small>"); 
    fontString .append("2"); 
    fontString.append("</small>"); 
    fontString.append("</sup>"); 

Также я попытался SpannableString форматирования

SpannableString spanString = new SpannableString("1.34456"); 
    spanString.setSpan(new RelativeSizeSpan(1.75f), 0,spanString.length()-2-1, 0); 
    spanString.setSpan(new StyleSpan(Typeface.BOLD), spanString.length()-2-1, spanString.length()-1, 0); 
    spanString.setSpan(new ForegroundColorSpan(Color.RED), spanString.length()-2-1, spanString.length()-1, 0);  
    spanString.setSpan(new RelativeSizeSpan(3f), spanString.length()-2-1, spanString.length()-1, 0);   
    spanString.setSpan(new RelativeSizeSpan(1.25f), spanString.length()-1, spanString.length(), 0); 

как нижеуказанному изображения, enter image description here

Пожалуйста, предложите мне, если вы знаете решение, я пробовал с верхним индексом или индексом, но не повезло.

+0

Не было бы проще использовать три разных TextViews, каждый с разными TextSize? – Marcus

+0

попробуйте с 'android: gravity =" top "' – Froyo

+0

Нет, мне нужно реализовать в единственном Textview, чтобы поддерживать стандарт в коде @Marcus – Srinivasan

ответ

0

Пожалуйста, найти решение,

Используйте этот класс для выравнивания текста,

import android.text.TextPaint; 
import android.text.style.MetricAffectingSpan; 

public class SuperscriptSpanAdjuster extends MetricAffectingSpan { 
    double ratio = 0.5; 

    public SuperscriptSpanAdjuster() { 
    } 

    public SuperscriptSpanAdjuster(double ratio) { 
     this.ratio = ratio; 
    } 

    @Override 
    public void updateDrawState(TextPaint paint) { 
     paint.baselineShift += (int) (paint.ascent() * ratio); 
    } 

    @Override 
    public void updateMeasureState(TextPaint paint) { 
     paint.baselineShift += (int) (paint.ascent() * ratio); 
    } 

} 

Здесь вы можете найти формат SpannedString,

SpannableString spanString = new SpannableString(value); 
    /* To show the text in top aligned(Normal)*/ 
    spanString.setSpan(new SuperscriptSpanAdjuster(0.7), 0,spanString.length()-mostSignificantLength-leastSignificantLength, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); 
    /* Show the number of characters is normal size (Normal)*/ 
    spanString.setSpan(new RelativeSizeSpan(1.3f), 0,spanString.length()-mostSignificantLength-leastSignificantLength, 0); 
    /*To set the text style as bold(MostSignificant)*/ 
    spanString.setSpan(new StyleSpan(Typeface.BOLD), spanString.length()-mostSignificantLength-leastSignificantLength, spanString.length()-leastSignificantLength, 0); 
    /*To set the text color as WHITE(MostSignificant)*/ 
    spanString.setSpan(new ForegroundColorSpan(Color.WHITE), spanString.length()-mostSignificantLength-leastSignificantLength, spanString.length()-leastSignificantLength, 0); 
    /*Show the number of characters as most significant value(MostSignificant)*/ 
    spanString.setSpan(new RelativeSizeSpan(2.3f), spanString.length()-mostSignificantLength-leastSignificantLength, spanString.length()-leastSignificantLength, 0); 

    /* To show the text in top aligned(LestSignificant)*/ 
    spanString.setSpan(new SuperscriptSpanAdjuster(1.2), spanString.length()-leastSignificantLength, spanString.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); 
    /*To set the text style as bold(LestSignificant)*/ 
    spanString.setSpan(new StyleSpan(Typeface.BOLD), spanString.length()-leastSignificantLength, spanString.length(), 0); 
    /*Show the number of characters as most significant value(LestSignificant)*/ 
    spanString.setSpan(new RelativeSizeSpan(0.8f), spanString.length()-leastSignificantLength, spanString.length(), 0); 

Счастливого кодирования ...

0

Вы можете использовать HTML-теги, такие как

<h1>...<h6> 

используя ниже код

txtview.setText(Html.fromHtml("your text here with HTML heading tags"); 

Может это поможет вам

+0

каждый тег заголовка перемещает следующую строку @ Kat-hat. Любое другое решение? – Srinivasan

0

Вы можете использовать SpannableString с RelativeSizeSpan создать несколько размеров текста в одном TextView , Установите значение силы тяжести текста в TOP, чтобы текст был прикреплен к верхнему краю.

+0

Я пробовал, как вы сказали, но это мне не помогло ... – Srinivasan

0

вы используете способ Html.fromhtml("your html formatted text") Это сработало для меня, спасибо.

Смежные вопросы