Различные размеры шрифтов строк в том же TextView
У меня есть textView
внутри с числом (переменной) и string
, как я могу дать номер один размер больше, чем string
? код:
TextView size = (TextView)convertView.findViewById(R.id.privarea_list_size);
if (ls.numProducts != null) {
size.setText(ls.numProducts + " " + mContext.getString(R.string.products));
}
Я хочу, чтобы размер ls.numproducts отличался от остального текста. Как сделать?
Ответы
Ответ 1
Используйте Spannable String
String s= "Hello Everyone";
SpannableString ss1= new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(2f), 0,5, 0); // set size
ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);// set color
TextView tv= (TextView) findViewById(R.id.textview);
tv.setText(ss1);
Снимок
![enter image description here]()
Вы можете разделить строку, используя пробел, и добавить span к требуемой строке.
String s= "Hello Everyone";
String[] each = s.split(" ");
Теперь примените span
к string
и добавьте то же самое к textview
.
Ответ 2
На тот случай, если вам интересно, как вы можете установить несколько разных размеров в одном и том же текстовом представлении, но используя абсолютный, а не относительный размер, вы можете добиться этого, используя AbsoluteSizeSpan
вместо RelativeSizeSpan
.
Просто получите размерность в пикселях нужного размера текста
int textSize1 = getResources().getDimensionPixelSize(R.dimen.text_size_1);
int textSize2 = getResources().getDimensionPixelSize(R.dimen.text_size_2);
а затем создать новый AbsoluteSpan
на основе текста
String text1 = "Hi";
String text2 = "there";
SpannableString span1 = new SpannableString(text1);
span1.setSpan(new AbsoluteSizeSpan(textSize1), 0, text1.length(), SPAN_INCLUSIVE_INCLUSIVE);
SpannableString span2 = new SpannableString(text2);
span2.setSpan(new AbsoluteSizeSpan(textSize2), 0, text2.length(), SPAN_INCLUSIVE_INCLUSIVE);
// let put both spans together with a separator and all
CharSequence finalText = TextUtils.concat(span1, " ", span2);
Ответ 3
Вы можете это сделать, используя html-строку и установив html в Textview, используя
txtView.setText(Html.fromHtml("Your html string here"));
Например:
txtView.setText(Html.fromHtml("<html><body><font size=5 color=red>Hello </font> World </body><html>"));`
Ответ 4
Метод 1
public static void increaseFontSizeForPath(Spannable spannable, String path, float increaseTime) {
int startIndexOfPath = spannable.toString().indexOf(path);
spannable.setSpan(new RelativeSizeSpan(increaseTime), startIndexOfPath,
startIndexOfPath + path.length(), 0);
}
используя
Utils.increaseFontSizeForPath(spannable, "big", 3); // make "big" text bigger 3 time than normal text
![введите описание изображения здесь]()
Метод 2
public static void setFontSizeForPath(Spannable spannable, String path, int fontSizeInPixel) {
int startIndexOfPath = spannable.toString().indexOf(path);
spannable.setSpan(new AbsoluteSizeSpan(fontSizeInPixel), startIndexOfPath,
startIndexOfPath + path.length(), 0);
}
используя
Utils.setFontSizeForPath(spannable, "big", (int) textView.getTextSize() + 20); // make "big" text bigger 20px than normal text
![введите описание изображения здесь]()
Ответ 5
Попробуйте spannableStringbuilder. Используя это, мы можем создать строку с несколькими размерами шрифтов.
Ответ 6
Я написал свою собственную функцию, которая принимает 2 строки и 1 int (размер текста)
Полный текст и часть текста вы хотите изменить его размер.
Он возвращает SpannableStringBuilder, который вы можете использовать в текстовом представлении.
public static SpannableStringBuilder setSectionOfTextSize(String text, String textToChangeSize, int size){
SpannableStringBuilder builder=new SpannableStringBuilder();
if(textToChangeSize.length() > 0 && !textToChangeSize.trim().equals("")){
//for counting start/end indexes
String testText = text.toLowerCase(Locale.US);
String testTextToBold = textToChangeSize.toLowerCase(Locale.US);
int startingIndex = testText.indexOf(testTextToBold);
int endingIndex = startingIndex + testTextToBold.length();
//for counting start/end indexes
if(startingIndex < 0 || endingIndex <0){
return builder.append(text);
}
else if(startingIndex >= 0 && endingIndex >=0){
builder.append(text);
builder.setSpan(new AbsoluteSizeSpan(size, true), startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}else{
return builder.append(text);
}
return builder;
}
Ответ 7
private SpannableStringBuilder SpannableStringBuilder(final String text, final char afterChar, final float reduceBy) {
RelativeSizeSpan smallSizeText = new RelativeSizeSpan(reduceBy);
SpannableStringBuilder ssBuilder = new SpannableStringBuilder(text);
ssBuilder.setSpan(
smallSizeText,
text.indexOf(afterChar),
text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
);
return ssBuilder;
}
------------------------
TextView textView =view.findViewById(R.id.textview);
String s= "123456.24";
textView.setText(SpannableStringBuilder(s, '.', 0.7f));
---------------- Результат ---------------
Результат:
12345. 24