android - texto - Configuración de fuente Roboto en TextView-xml
textview android studio español (6)
Echa un vistazo al proyecto RobotoTextView . Funciona hasta Android 1.5, y puedes configurar el tipo de letra usando atributos XML. También incluye otras vistas como RobotoButton, RobotoCheckbox, etc.
He encontrado varias publicaciones con respecto a este tema, pero todos estos temas establecen la fuente con el método setTypeFace()
en un objeto TextView
, o crean una clase personalizada que establece la fuente en Roboto
y extends
TextView
. Por lo que sé del nivel de API 11 (?) O algo así, podemos establecer el TypeFace como un atributo xml, de alguna manera. Me gusta esto:
<TextView
android:id="@+id/profileHeader"
android:layout_width="100dp"
android:layout_height="100dp"
android:typeface="roboto"
android:text="Hello, world">
</TextView>
¿Cuál es la forma correcta de hacer esto? ¿Es posible tener un respaldo si la aplicación se ejecuta en un dispositivo inferior al nivel de API 11 (?) Algo como:
android:typeface="roboto|monospace|serif"
El atributo android:typeface
solo tiene algunas opciones válidas (según la documentación de Android) ...
- normal
- sans
- serif
- monoespacio
Si necesita la fuente Roboto en su aplicación para dispositivos más antiguos, debe incluir los archivos Roboto TTF en su proyecto.
La forma más obvia de usar estas fuentes es usar el método setTypeface()
de TextView, pero si desea especificarlo en XML, debe crear un TextView personalizado y crear su propio atributo de estilo para su TextView personalizado.
Esto es para la gente futura que se ejecuta en el mismo problema que tengo. La configuración del tipo de letra tiende a ocupar gran cantidad de memoria cuando se trata de cargar varias filas. Usando los siguientes dos códigos juntos para que realmente funcione sin problemas. Obtuve la solución de pero sus respuestas no se enumeraron juntas.
public class RobotoTextView extends TextView {
Context context;
public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
}
public RobotoTextView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public RobotoTextView(Context context) {
super(context);
this.context = context;
}
public void setTypeface(Typeface tf, int style) {
if (!isInEditMode()) {
if (style == Typeface.NORMAL) {
super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Light.ttf"));
} else if (style == Typeface.ITALIC) {
super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-LightItalic.ttf"));
} else if (style == Typeface.BOLD) {
super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-Bold.ttf"));
} else if (style == Typeface.BOLD_ITALIC) {
super.setTypeface(TypeFaceProvider.getTypeFace(getContext(), "fonts/Roboto-BoldItalic.ttf"));
}
}
}
public class TypeFaceProvider {
private static Hashtable<String, Typeface> sTypeFaces = new Hashtable<String, Typeface>(
4);
public static Typeface getTypeFace(Context context, String fileName) {
Typeface tempTypeface = sTypeFaces.get(fileName);
if (tempTypeface == null) {
tempTypeface = Typeface.createFromAsset(context.getAssets(),
fileName);
sTypeFaces.put(fileName, tempTypeface);
}
return tempTypeface;
}
}
No puede establecer la fuente directamente desde activos como este que tiene que hacer como sigue en onCreate. Esto hará lo mismo que quieres hacer.
TextView tvTextView = (TextView) findViewById(R.id.textView1);
Typeface typeface = Typeface.createFromAsset(getAssets(),"Roboto.ttf");
tvTextView.setTypeface(typeface);
Espero que te ayude.
No veo una forma de definir un tipo de letra externo como un atributo xml. Debe almacenar el tipo de letra en los recursos y llamar:
tv.setTypeface( Typeface.createFromAsset( context.getAssets(), roboto.ttf ) );
Para JellyBean (4.1) en adelante, puede utilizar el método proporcionado en este tema de . Se recuperará con gracia a sans en dispositivos más antiguos. Si debe utilizar Monospace o Serif, declare una carpeta layout-v16 donde use la fuente que eligió, es decir, "sans-serif-condensed", y en la carpeta predeterminada use la fuente "monospace" o "serif". Si desea recurrir a una fuente no predeterminada, puede verificar la versión de Android mediante programación y elegir la acción adecuada, es decir:
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
TextView textView = (TextView) findViewById(R.id.textView_id);
Typeface myFont = Typeface.createFromAsset(getAssets(),"RobotoCondensed.ttf");
textView.setTypeface(myFont);
}