Ahora vamos a hacer varias cosas que había tenido pendiente como agregar un nuevo tipo de letra a un componente TextView y crear sus propios atributos.
Primero tenemos que crear una nueva clase que extienda de TextView
package mx.com.qbit.components; ... public class CustomTextView extends TextView { public CustomTextView(Context context) { super(context); } public CustomTextView(Context context, AttributeSet attrs) { super(context, attrs); setCustomFont(context, attrs); } public CustomTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setCustomFont(context, attrs); } private void setCustomFont(Context context, AttributeSet attribute) { TypedArray styleAttributes = context.obtainStyledAttributes(attribute, R.styleable.CustomTextView); String customFontName = styleAttributes.getString(R.styleable.CustomTextView_customFont); setTypeface( Typeface.createFromAsset(context.getAssets(), customFontName) ); styleAttributes.recycle(); } } |
Posteriormente creamos una carpeta assets en donde vamos a colocar los archivos con extensión “ttf”. Para esto, en Android Studio damos clic con el botón secundario del ratón, sobre algunas de las carpetas localizadas en la ventana “Project”; seleccionamos “New>Folder>Assets Folder”.
Después agregamos una nuevo archivo XML en la carpeta “values” y colocamos la siguiente información que indica la nueva propiedad de nuestro componente “CustomTextView”
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CustomTextView"> <attr name="customFont" format="string"/> </declare-styleable> </resources> |
Por último en nuestro “layout” colocamos el nuevo componente:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> ... <mx.com.qbit.components.CustomTextView android:layout_width="match_parent" android:layout_height="wrap_content" custom:customFont="My_font.ttf" /> </LinearLayout> |