tipo tamaño studio programacion móviles letra desarrollo curso cambiar aplicaciones android fonts styles textview

android - tamaño - Aplicar dos estilos de fuente diferentes a un TextView



programacion android pdf 2018 (6)

¿Intentó configurar un tipo de letra personalizado en TextView antes de aplicar texto extensible?

Typeface face = Typeface.createFromAsset(ctx.getAssets(), "fonts/boost.ttf") TextView tv = (TextView) ctx.findViewById(id); tv.setTypeface(face);

y luego aplique SpannableStringBuilder a partir de la pregunta vinculada. Solo asumo que si su ttf admite "normal" y "negrita", se representará en consecuencia :)

Quiero aplicar dos estilos de fuente diferentes a un texto en un solo TextView.

Mi caso es el mismo que el de Android: dos oraciones, dos estilos, un TextView . La única diferencia es que quiero establecer una fuente personalizada en todo el texto. He incluido Helvetica Font como activo en mi proyecto y quiero aplicar esa fuente a TextView, ya que la primera parte del texto será Helvetica BOLD y la parte restante Helvetica NORMAL. ¿Alguna sugerencia de cómo se puede hacer?

Texto necesario en el siguiente formato. Texto personalizado con diferentes estilos y vista de texto individual.


Aquí hay una solución más sencilla, puede usar HTML para establecer diferentes estilos en el mismo TextView .

Por ejemplo:

// Styled label String styledText = "<big><b><font color=''#333333''>title</font></b></big> <small><b><font color=''#CC5490''>subtitle</font></b></small>"; // Apply the styled label on the TextView textView.setText(Html.fromHtml(styledText));

Necesitas la siguiente importación:

import android.text.Html;


Esto puede funcionar: cree su propio TextView personalizado y luego use un StyleSpan en una parte del mismo:

public class CustomTextView extends TextView { public CustomTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setTypeface(Typeface tf, int style) { if (style == 1){ //replace "HelveticaBOLD.otf" with the name of your bold font tf = Typeface.createFromAsset(getContext().getApplicationContext().getAssets(), "HelveticaBOLD.otf"); }else{ //replace "HelveticaNORMAL.otf" with the name of your normal font tf = Typeface.createFromAsset(getContext().getApplicationContext().getAssets(), "HelveticaNORMAL.otf"); } super.setTypeface(tf, 0); } }

Y luego puedes hacer algo como:

int index1 = 0; //wherever bold should begin int index2 = 5; //wherever bold should end Spannable span = new SpannableString("some string"); span.setSpan(new StyleSpan(Typeface.BOLD),index1, index2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ((CustomTextView)findViewById(R.id.yourTextView)).setText(span);


Puede crear una vista personalizada y representar su texto con dos objetos de Paint utilizando el método canvas.drawText


Una forma de hacer esto es extender TypefaceSpan :

import android.graphics.Paint; import android.graphics.Typeface; import android.text.TextPaint; import android.text.style.TypefaceSpan; public class CustomTypefaceSpan extends TypefaceSpan { private final Typeface newType; public CustomTypefaceSpan(String family, Typeface type) { super(family); newType = type; } @Override public void updateDrawState(TextPaint ds) { applyCustomTypeFace(ds, newType); } @Override public void updateMeasureState(TextPaint paint) { applyCustomTypeFace(paint, newType); } private static void applyCustomTypeFace(Paint paint, Typeface tf) { int oldStyle; Typeface old = paint.getTypeface(); if (old == null) { oldStyle = 0; } else { oldStyle = old.getStyle(); } int fake = oldStyle & ~tf.getStyle(); if ((fake & Typeface.BOLD) != 0) { paint.setFakeBoldText(true); } if ((fake & Typeface.ITALIC) != 0) { paint.setTextSkewX(-0.25f); } paint.setTypeface(tf); } }

Entonces cuando quieras usar dos tipos de letra diferentes llama:

String firstWord = "first "; String secondWord = "second"; // Create a new spannable with the two strings Spannable spannable = new SpannableString(firstWord+secondWord); // Set the custom typeface to span over a section of the spannable object spannable.setSpan( new CustomTypefaceSpan("sans-serif",CUSTOM_TYPEFACE), 0, firstWord.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannable.setSpan( new CustomTypefaceSpan("sans-serif",SECOND_CUSTOM_TYPEFACE), firstWord.length(), firstWord.length() + secondWord.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Set the text of a textView with the spannable object textView.setText( spannable );


Yo uso este enfoque

class FooClass { void Foo() { textViewSetText(R.id.photo_title, "Title: ", photo.getTitle()); textViewSetText(R.id.photo_tags, "Tags: ", photo.getTags()); textViewSetText(R.id.photo_author, "Author: ", photo.getAuthor()); } private void textViewSetText(int resourceId, String prefix, String text) { TextView textView = (TextView) findViewById(resourceId); SpannableString styledText = new SpannableString(prefix); styledText.setSpan(new StyleSpan(Typeface.BOLD), 0, prefix.length(), 0); textView.setText(null); textView.append(styledText); textView.append(text); } }

Como puede ver, " Autor ", " Título " y " Etiquetas " están en BOLD

Captura de pantalla http://image.prntscr.com/image/dd60bb4a335445c2adca8a4596d7fb32.png