Taille de police différente des chaînes dans le même TextView

J’ai un textView intérieur avec un nombre (variable) et une ssortingng , comment puis-je donner la taille du numéro un plus grande que la chaîne? le code:

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

Je veux que ls.numproducts ait une taille différente du rest du texte. Comment faire?

Utilisez une chaîne spannable

  Ssortingng s= "Hello Everyone"; SpannableSsortingng ss1= new SpannableSsortingng(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); 

Instantané

entrer la description de l'image ici

Vous pouvez diviser la chaîne en utilisant de l’espace et append un intervalle à la chaîne requirejse.

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

Appliquez maintenant span à la chaîne et ajoutez la même chose à textview.

Juste au cas où vous vous demanderiez comment définir plusieurs tailles différentes dans la même textview, mais en utilisant une taille absolue et non relative, vous pouvez obtenir ce résultat en utilisant AbsoluteSizeSpan au lieu de RelativeSizeSpan .

Il suffit d’obtenir la dimension en pixels de la taille de texte souhaitée

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

puis créer un nouveau AbsoluteSpan basé sur le texte

 Ssortingng text1 = "Hi"; Ssortingng text2 = "there"; SpannableSsortingng span1 = new SpannableSsortingng(text1); span1.setSpan(new AbsoluteSizeSpan(textSize1), 0, text1.length(), SPAN_INCLUSIVE_INCLUSIVE); SpannableSsortingng span2 = new SpannableSsortingng(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); 

Vous pouvez le faire en utilisant la chaîne html et en définissant le HTML sur Textview en utilisant
txtView.setText(Html.fromHtml("Your html ssortingng here"));

Par exemple :

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

Méthode 1

 public static void increaseFontSizeForPath(Spannable spannable, Ssortingng path, float increaseTime) { int startIndexOfPath = spannable.toSsortingng().indexOf(path); spannable.setSpan(new RelativeSizeSpan(increaseTime), startIndexOfPath, startIndexOfPath + path.length(), 0); } 

en utilisant

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

entrer la description de l'image ici

Méthode 2

 public static void setFontSizeForPath(Spannable spannable, Ssortingng path, int fontSizeInPixel) { int startIndexOfPath = spannable.toSsortingng().indexOf(path); spannable.setSpan(new AbsoluteSizeSpan(fontSizeInPixel), startIndexOfPath, startIndexOfPath + path.length(), 0); } 

en utilisant

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

entrer la description de l'image ici

Essayez spannableSsortingngbuilder . En utilisant cela, nous pouvons créer une chaîne avec plusieurs tailles de police.

J’ai écrit ma propre fonction qui prend 2 chaînes et 1 int (taille du texte)

Le texte intégral et la partie du texte que vous souhaitez modifier en taille.

Il retourne un SpannableSsortingngBuilder que vous pouvez utiliser en mode texte.

  public static SpannableSsortingngBuilder setSectionOfTextSize(Ssortingng text, Ssortingng textToChangeSize, int size){ SpannableSsortingngBuilder builder=new SpannableSsortingngBuilder(); if(textToChangeSize.length() > 0 && !textToChangeSize.sortingm().equals("")){ //for counting start/end indexes Ssortingng testText = text.toLowerCase(Locale.US); Ssortingng 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 SpannableSsortingngBuilder SpannableSsortingngBuilder(Ssortingng text) { RelativeSizeSpan smallSizeText = new RelativeSizeSpan(.7f); SpannableSsortingngBuilder ssBuilder = new SpannableSsortingngBuilder(text); ssBuilder.setSpan( smallSizeText, text.indexOf("."), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); return ssBuilder; } ------------------------ TextView textView =view.findViewById(R.id.textview); Ssortingng s= "123456.24"; textView.setText(SpannableSsortingngBuilder(s)); 

—————- Résultat —————

Résultat :

12345. 24