it-swarm.com.de

Unterschiedliche Schriftgröße von Strings in derselben TextView

Ich habe eine textView mit einer Nummer (Variable) und einer string. Wie kann ich die Nummer um eine Größe größer als die string? .__ angeben. Der Code:

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

Ich möchte, dass ls.numproducts eine vom Rest des Textes abweichende Größe hat. Wie macht man?

114
Adriana Carelli

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

Schnappschuss

enter image description here

Sie können die Zeichenfolge mit Leerzeichen teilen und der gewünschten Zeichenfolge einen Abstand hinzufügen.

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

Wenden Sie nun span auf die string an und fügen Sie dasselbe zu textview hinzu.

297
Raghunandan

Nur für den Fall, dass Sie sich fragen, wie Sie mehrere verschiedene Größen in derselben Textansicht einstellen können. Wenn Sie jedoch eine absolute und keine relative Größe verwenden, können Sie dies mit AbsoluteSizeSpan anstelle einer RelativeSizeSpan erreichen.

Ermitteln Sie einfach die Größe in Pixeln der gewünschten Textgröße

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

und erstellen Sie dann eine neue 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);
97
Joao Sousa

Sie können dies tun, indem Sie eine HTML-Zeichenfolge verwenden und die HTML mit auf Textansicht setzen
txtView.setText(Html.fromHtml("Your html string here"));

Beispielsweise :

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

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

mit

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

 enter image description here

2
Linh
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));

---------------- Ergebnis ---------------

Ergebnis: 

12345.24

1
Anandharaj R

Der beste Weg, dies zu tun, ist Html ohne Teilstring Ihres Textes und voller Dynamik Zum Beispiel:

  public static String getTextSize(String text,int size) {
         return "<span style=\"size:"+size+"\" >"+text+"</span>";

    }

und Sie können color attribut etc ....__ verwenden, wenn die andere Hand:

size.setText(Html.fromHtml(getTextSize(ls.numProducts,100) + " " + mContext.getString(R.string.products));  
1
Garci

Ich habe meine eigene Funktion geschrieben, die 2 Strings und 1 Int benötigt (Textgröße)

Der Volltext und der Teil des Textes, dessen Größe Sie ä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;
    }
1
Ali Asadi

Versuchen Sie spannableStringbuilder . Damit können wir einen String mit mehreren Schriftgrößen erstellen.

1
PgmFreek