2013-05-02 2 views
87

У меня есть textView внутри с числом (переменная) и string, как я могу присвоить размер номер один больше, чем строка? код:Разный размер шрифта в том же TextView

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 имеет размер, отличный от остальной части текста. Как сделать?

+0

Поскольку у меня нет достаточной репутации прокомментировать ответ Raghunandan, позвольте мне поделиться одним Гоча как отдельный ответ для тех, встретив этот вопрос сейчас, что дизайн материал из: Похоже, что Spannables не работают с параметром 'textAllCaps = true', установленным в представлении« »для применения параметра Spannable to. (см. здесь: http://stackoverflow.com/questions/29007746/button-settext-with-spannable-dosent-work-for-android-5-0-lollipop) – bairprogramming

ответ

232

Используйте Spannable Строка

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

можно разбить строку, используя пространство и добавить пядь в строку вам требуется.

String s= "Hello Everyone"; 
String[] each = s.split(" "); 

Теперь примените span к строке и добавьте то же самое к textview.

+0

setSpan() return: java.lang.IndexOutOfBoundsException: setSpan (0 ... 5) заканчивается за пределами длины 1. Что это значит? –

+0

Проверьте длину строки. IndexOutOfBoundsException: указание неправильной позиции индекса для начала и конца диапазона. в приведенной выше длине Hello 5, поэтому я применил диапазон от индекса 0 до 5 – Raghunandan

+0

Работал над Google Glass отлично! –

7

Вы можете получить это сделано с помощью 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>"));` 
+0

Могу ли я увидеть пример? –

+0

Обновил мой ответ. – Remmyabhavan

+18

Размер шрифта не работает – desgraci

73

На всякий случай вам интересно, как вы можете установить несколько разных размеров в одном текстовом виде, но используя абсолютный размер, а не относительный, вы можете достичь этого, используя 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's put both spans together with a separator and all 
CharSequence finalText = TextUtils.concat(span1, " ", span2); 
+0

Хорошее дополнение с примером 'AbsoluteSizeSpan' – eugeneek

+0

лучший подход – dgngulcan

+0

Не работал для меня. –

1

Метод 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 

enter image description here

Метод 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 

enter image description here

0

я написал м y собственная функция, которая принимает 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; 
    } 
Смежные вопросы