2013-05-02 3 views
87

Ich habe eine textView innen mit einer Nummer (Variable) und eine string, wie kann ich die Nummer eine Größe größer als die Zeichenfolge geben? der Code:Andere Schriftgröße von Strings in der gleichen TextView

TextView size = (TextView)convertView.findViewById(R.id.privarea_list_size); 
if (ls.numProducts != null) { 
    size.setText(ls.numProducts + " " + mContext.getString(R.string.products)); 
} 

I ls.numproducts wollen hat eine Größe anders als der Rest des Textes. Wie macht man?

txtView.setText(Html.fromHtml("<html><body><font size=5 color=red>Hello </font> World </body><html>"));` 
+0

Da ich auf Raghunandan Antwort nicht genug Ruf zu kommentieren, lassen Sie mich für alle, eine Gotcha als separate Antwort teilen auf diese Frage kommen jetzt, dass Material-Design ist aus: Es scheint, dass Spannables funktionieren nicht Mit 'textAllCaps = true' setzen Sie auf die View you und wenden das Spannable auf an. (Siehe hier: http://stackoverflow.com/questions/29007746/button-settext-with-spannable-dosent-work-for-android-5-0-lollipop) – bairprogramming

Antwort

232

Verwenden Sie ein 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); 

Snap-Schuss

enter image description here

Sie können Zeichenfolge mit Leerzeichen aufgespalten und fügen Spanne der Zeichenfolge, die Sie benötigen.

Nun wenden Sie span auf die Zeichenkette an und fügen Sie das gleiche Textview hinzu.

+0

setSpan() return: java.lang.IndexOutOfBoundsException: setSpan (0 ... 5) endet über die Länge 1. Was bedeutet das? –

+0

Überprüfen Sie die Länge der Zeichenfolge. IndexOutOfBoundsException: Angabe der falschen Indexposition für den Beginn und das Ende der Spanne. in der oben genannten Hello Länge ist 5, so dass ich Span von Index 0 bis 5 angewendet – Raghunandan

+0

Arbeitete auf Google Glass perfekt! –

7

Sie können diese
txtView.setText(Html.fromHtml("Your html string here"));

Zum Beispiel unter Verwendung von mit HTML-String und die Einstellung der html Textview zu erledigen. Mit diesem können wir eine Zeichenfolge mit mehreren Schriftgrößen erstellen.

+0

Kann ich ein Beispiel sehen? –

+0

Habe meine Antwort aktualisiert. – Remmyabhavan

+18

die Schriftgröße funktioniert nicht – desgraci

73

Nur falls Sie sich fragen, wie Sie mehrere unterschiedliche Größen in der gleichen Textview gesetzt, aber eine absolute Größe und keinen relativen verwenden, können Sie erreichen, dass AbsoluteSizeSpan anstelle eines RelativeSizeSpan verwenden.

erhalten einfach die Dimension in den Bildpunkten der gewünschten Textgröße

int textSize1 = getResources().getDimensionPixelSize(R.dimen.text_size_1); 
int textSize2 = getResources().getDimensionPixelSize(R.dimen.text_size_2); 

und erzeugt dann ein neues AbsoluteSpan basierend auf dem Text

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

Gute Ergänzung mit 'AbsoluteSizeSpan' Beispiel – eugeneek

+0

ein besserer Ansatz – dgngulcan

+0

Hat nicht für mich gearbeitet. –

1

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

mit

Utils.increaseFontSizeForPath(spannable, "big", 3); // make "big" text bigger 3 time than normal text 

enter image description here

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

Verwendung

Utils.setFontSizeForPath(spannable, "big", (int) textView.getTextSize() + 20); // make "big" text bigger 20px than normal text 

enter image description here

0

I haben m geschrieben y eigene Funktion, die 2 Zeichenfolgen und 1 int (Textgröße)

Der vollständige Text und der Teil des Textes, den Sie die Größe ändern möchten.

Es gibt einen SpannableStringBuilder zurück, den Sie in der Textansicht verwenden können.

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; 
    } 
Verwandte Themen