Diferentes tamaños de letra de cadenas en el mismo TextView

Tengo una vista de texto dentro con un número (variable) y una string , ¿cómo puedo dar el número uno más grande que la cadena? el código:

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

Quiero que ls.numproducts tenga un tamaño diferente del rest del texto. ¿Cómo hacer?

    Use una cadena de 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); 

    Disparo rápido

    enter image description here

    Puede dividir cadena usando espacio y agregar span a la cadena que necesita.

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

    Ahora aplique span a la cadena y agréguela a textview.

    En caso de que se pregunte cómo puede configurar múltiples tamaños diferentes en la misma vista de texto, pero usando un tamaño absoluto y no uno relativo, puede lograrlo usando AbsoluteSizeSpan lugar de RelativeSizeSpan .

    Simplemente obtenga la dimensión en píxeles del tamaño de texto deseado

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

    y luego crea un nuevo AbsoluteSpan basado en el texto

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

    Puede hacerlo usando una cadena html y configurando el html en Textview usando
    txtView.setText(Html.fromHtml("Your html string here"));

    Por ejemplo :

     txtView.setText(Html.fromHtml("Hello  World "));` 

    Método 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); } 

    utilizando

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

    enter image description here

    Método 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); } 

    utilizando

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

    enter image description here

    Prueba spannableStringbuilder . Usando esto podemos crear una cadena con múltiples tamaños de fuente.

    He escrito mi propia función que toma 2 cadenas y 1 int (tamaño del texto)

    El texto completo y la parte del texto que desea cambiar el tamaño de la misma.

    Devuelve un SpannableStringBuilder que puede usar en la vista de texto.

      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; } 
     private SpannableStringBuilder SpannableStringBuilder(String text) { RelativeSizeSpan smallSizeText = new RelativeSizeSpan(.7f); SpannableStringBuilder ssBuilder = new SpannableStringBuilder(text); ssBuilder.setSpan( smallSizeText, text.indexOf("."), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); return ssBuilder; } ------------------------ TextView textView =view.findViewById(R.id.textview); String s= "123456.24"; textView.setText(SpannableStringBuilder(s)); 

    —————- Resultado —————

    Resultado:

    12345. 24