Cómo usar fuentes personalizadas en un proyecto escrito en Android Studio


Respuestas:


344

Actualización 2020:

Cree una carpeta llamada fuente dentro de la carpeta res y copie su fuente

ingrese la descripción de la imagen aquí

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="@font/abc_font" />

Para uso programático:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))

10
Cualquiera que cargue fuentes personalizadas desde activos debe tener en cuenta que hay un error en Android 5.0 en el que algunas fuentes no se cargan. Si bien este problema se solucionó en Android 5.1, una solución alternativa para admitir 5.0 es reescribir las fuentes ttf. Consulte este número para obtener más información stackoverflow.com/questions/27269264/…
BrentM

La segunda opción funcionó perfectamente para mí. ¡Gracias por esto!
Emzor

2
Utilicé this.getContext (). getApplicationContext (). getAssets () para encontrar el directorio (android studio 2.1)
kuzdu

1
@kuthue onCreate () está bien. Si desea cambiar la fuente mientras el usuario está usando la aplicación, puede colocarla en el punto que desea cambiar. Esto también funciona para botones
rockhammer

1
¿Cómo puedo configurar que la fuente predeterminada para todo el proyecto sea la personalizada que estoy agregando? ¿Es eso lo que está haciendo el primer ejemplo de código?
Yonatan Nir

98

https://i.stack.imgur.com/i6XNU.png

  1. Seleccione Archivo> Nuevo> Carpeta> Carpeta de activos

  2. Haga clic en terminar

  3. Haga clic derecho en los activos y cree una carpeta llamada fuentes

  4. Pon tu archivo de fuente en activos > fuentes

  5. Use el código a continuación para cambiar la fuente de su textView

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);

12
¿Cómo usar esto en xml?
Suisse

44
Este tutorial proporciona cómo usarlo en un XML: stacktips.com/tutorials/android/…
Dinesh

@Suisse La biblioteca de soporte 26 proporciona soporte completo para esta característica en dispositivos que ejecutan API versiones 14 y enlaces
Ehsan.R

66

Hay muchas formas de establecer una familia de fuentes personalizada en el campo y estoy usando así a continuación.

Para agregar fuentes como recursos, realice los siguientes pasos en Android Studio:

1) Haga clic derecho en la carpeta res y vaya a Nuevo> directorio de recursos de Android. Aparece la ventana Nuevo directorio de recursos.

2) En la lista Tipo de recurso, seleccione la fuente y luego haga clic en Aceptar.

Nota: El nombre del directorio de recursos debe ser fuente.

3) Agregue sus archivos de fuente en la carpeta de fuentes. ingrese la descripción de la imagen aquí

Agregue la fuente en la vista deseada en su archivo xml:

ingrese la descripción de la imagen aquí

Nota: Pero requirió lo siguiente para eso:

  1. Android Studio anterior a 3.0 canario.

  2. Su actividad extiende AppCompatActivity.

  3. Actualice su archivo Gradle así:

    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {        
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildtoolsVersionarriba a 26 y mínimo targetSdkVersionrequerido 26

  1. Agregue dependencias en el archivo build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
  1. gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

42

Creo que en lugar de descargar el archivo .ttf podemos usar las fuentes de Google. Es muy fácil de implementar. solo tienes que seguir estos pasos. paso 1) Abra layout.xml de su proyecto y seleccione la familia de fuentes de la vista de texto en los atributos (se adjunta la captura de pantalla de referencia) ingrese la descripción de la imagen aquí

paso 2) La familia in font selecciona la opción Más fuentes ... si tu fuente no está allí. luego verá que se abrirá una nueva ventana, allí puede escribir la fuente requerida y seleccionar la fuente deseada de esa lista, es decir, Regular, Negrita, Cursiva, etc. como se muestra en la imagen a continuación. ingrese la descripción de la imagen aquí

paso 3) Luego observará que se generará automáticamente una carpeta de fuentes en la carpeta / res que tendrá el archivo xml de fuentes seleccionado.

ingrese la descripción de la imagen aquí

Entonces puede usar directamente esta familia de fuentes en xml como

      android:fontFamily="@font/josefin_sans_bold"

o programáticamente puedes lograr esto usando

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);

Esta no es una respuesta a la pregunta. No todas las fuentes están disponibles en Google Fonts.
Matt Fletcher

2
¡Buena respuesta! Si no puede encontrar su fuente en la lista,
cárguela

21

Hola, tenemos una mejor manera de aplicar fuentes en EditTexts y TextViews en Android a la vez y aplicarlo en todo el proyecto.

En primer lugar, debe hacer la carpeta de fuentes. Aquí hay pasos.

1: Vaya a la (carpeta del proyecto) Luego aplicación> src> principal

2: Cree carpetas llamadas 'activos / fuentes' en la carpeta principal.

3: Coloque sus fuentes en la carpeta de fuentes. Aquí tengo 'MavenPro-Regular.ttf'

Estos son los Pasos para aplicar fuentes personalizadas en EditText y, utilizando este enfoque, puede aplicar fuentes en cada entrada.

1: Cree una clase MyEditText (su nombre preferido ...)

2: que extiende EditText

3: aplica tu fuente

Aquí está el código Ejemplo;

public class MyEditText extends EditText {

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyEditText(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf");
            setTypeface(tf);
        }
    }

}

Y aquí está el código de cómo usarlo.

MyEditText editText = (MyEditText) findViewById(R.id.editText);

editText.setText("Hello");

O en su archivo xml

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />

Esa clase me dio ese error en tiempo de ejecución: Error al inflar la clase MyEditText
GMX

Consulte este enlace, puede encontrar algunos consejos sobre cómo resolver el error.
Mohammad Naim Dahee


Con la compilación actual, creo que necesitaría cambiar esto para "extiende AppCompatEditText".
Diesel

15

Con Support Library 26.0 (y Android O), las fuentes se pueden cargar fácilmente desde el recurso con: ingrese la descripción de la imagen aquí

Typeface typeface = ResourcesCompat.getFont(Context context, int fontResourceId) 

Documentos para el método .

Más información se puede encontrar aquí.


9

Quiero agregar mi respuesta para Android-O y Android Studio 2.4

  1. Crear carpeta llamada fuente en la carpeta res . Descargue las diversas fuentes que desea agregar a su proyecto, por ejemplo, las fuentes de Google

  2. Dentro de su familia de fuentes de usuario xml

    ejemplo:

    <TextView
        android:fontFamily="@font/indie_flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/sample_text" />

3.Si desea que sea de forma programática, use el siguiente código

Typeface typeface = getResources().getFont(R.font.indie_flower);
textView.setTypeface(typeface);

para obtener más información, siga el enlace a mi entrada de blog Estilos de fuente para Android con Android Studio 2.4


66
Tenga en cuenta que si desea promocionar su propio producto / blog, debe divulgar su afiliación , de lo contrario, su respuesta puede ser marcada como spam. Por favor, lea Cómo no ser un spammer
DavidPostill

Sí @PetterFriberg
Suresh Maidaragi

8

Según la nueva función disponible en Android O, los recursos de fuentes en XML están disponibles como nueva función.

Para agregar fuentes como recursos, realice los siguientes pasos en Android Studio:

1) Haga clic derecho en la carpeta res y vaya a Nuevo> directorio de recursos de Android . Aparece la ventana Nuevo directorio de recursos.

2) En la lista Tipo de recurso, seleccione la fuente y luego haga clic en Aceptar.

Nota: El nombre del directorio de recursos debe ser fuente.

3) Agregue sus archivos de fuente en la carpeta de fuentes.

Puede acceder a los recursos de fuente con la ayuda de un nuevo tipo de recurso, fuente. Por ejemplo, para acceder a un recurso de fuente, use @ font / myfont o R.font.myfont.

p.ej. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);


2
debería ser ResourcesCompat.getFont (contexto, R.font.your_font)
Trung Le

7

Puede usar la biblioteca de terceros EasyFonts fácil y simple para configurar una variedad de fuentes personalizadas para su TextView. Al usar esta biblioteca, no debería tener que preocuparse por descargar y agregar fuentes a la carpeta de recursos / fuentes. También sobre la creación de objetos tipográficos. También podrá crear carpetas de activos.

Simplemente:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Hay muchos tipos de fuentes proporcionadas por esta biblioteca.


6

Primero agregue el archivo font.ttf en la carpeta de fuentes. Luego agregue esta línea en el método onCreate

    Typeface typeface = ResourcesCompat.getFont(getApplicationContext(), R.font.myfont);
    mytextView.setTypeface(typeface);

Y aqui esta mi xml

            <TextView
            android:id="@+id/idtext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:text="My Text"
            android:textColor="#000"
            android:textSize="10sp"
        />

4
  1. Cree activos de carpeta en Proyecto -> aplicación (o el nombre de su aplicación) -> src -> principal -> haga clic derecho -> Nuevo -> Directorio.
  2. Luego cree un nuevo directorio dentro de los activos llamados "fuentes".

Para asignar la fuente a textView:

TextView textView = (TextView) findViewById(R.id.your_textView);

final Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/your_font_name");

your_font_name incluye extensión de fuente.


3

Si eres nuevo en Android como yo, esto puede ser un poco complicado. Asegúrate de llamar:

TextView myTextView = (TextView) findViewById(R.id.textView);
Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/your font.ttf");
myTextView.setTypeface(typeface);

método dentro de un método como onCreate.


3

Android 8.0 (API 26) introdujo nuevas características relacionadas con las fuentes.

1) Las fuentes se pueden usar como recursos.

2) Fuentes descargables.

Si desea utilizar fuentes externas en su aplicación de Android, puede incluir archivos de fuentes en apk o configurar fuentes descargables.

Incluyendo archivos de fuente en APK : puede descargar archivos de fuente, guardarlos en res / font filer, definir la familia de fuentes y usar la familia de fuentes en los estilos.

Para obtener más detalles sobre el uso de fuentes personalizadas como recursos, consulte http://www.zoftino.com/android-using-custom-fonts

Configuración de fuentes descargables : defina la fuente proporcionando detalles del proveedor de la fuente, agregue el certificado del proveedor de la fuente y use la fuente en estilos.

Para obtener más detalles sobre las fuentes descargables, visite http://www.zoftino.com/downloading-fonts-android



1
Además, el hecho de que las fuentes personalizadas / descargables se hayan introducido en Android O (8.0) no significa que no tenga compatibilidad con versiones anteriores. Consulte la documentación oficial sobre cómo implementar fuentes personalizadas. Tenga en cuenta que es posible que también necesite Android Studio 3.0 instalado.
anthonymonori

1

Primero crea una assetscarpeta y luego crea una fontscarpeta en ella.

Luego puede establecer fontdesde assetso directorycomo abajo:

public class FontSampler extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.custom);
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");

        tv.setTypeface(face);

        File font = new File(Environment.getExternalStorageDirectory(), "MgOpenCosmeticaBold.ttf");

        if (font.exists()) {
            tv = (TextView) findViewById(R.id.file);
            face = Typeface.createFromFile(font);

            tv.setTypeface(face);
        } else {
            findViewById(R.id.filerow).setVisibility(View.GONE);
        }
    }
} 

1

Ahora hay muchas maneras de aplicar la fuente, una de las más fáciles es 1) Haga clic con el botón derecho en la carpeta res y vaya a Nuevo> directorio de recursos de Android.

2) En la lista Tipo de recurso, seleccione la fuente y luego haga clic en Aceptar.

3) Coloque sus archivos de fuente en la carpeta de fuentes.


1

Agregue sus fuentes a la carpeta de activos en app / src / main / assets haga una vista de texto personalizada como esta:

class CustomLightTextView : TextView {

constructor(context: Context) : super(context){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet):    super(context, attrs){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet?,    defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    attachFont(context)
}
fun attachFont(context: Context) {
    this.setTypeface(FontCache.getInstance().getLightFont(context))
}

}

Agregue FontCache: para que no tenga que crear tipo de letra una y otra vez como:

class FontCache private constructor(){

val fontMap = HashMap<String,Typeface>()

companion object {
    private var mInstance : FontCache?=null
    fun getInstance():FontCache = mInstance?: synchronized(this){
        return mInstance?:FontCache().also { mInstance=it }
    }
}

fun getLightFont(context: Context):Typeface?{
    if(!fontMap.containsKey("light")){
        Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf");
        fontMap.put("light",Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf"))
    }
    return fontMap.get("light")
}

}

Y ya está!

PS Desde Android O, puede agregar fuentes directamente.


1

coloque las fuentes en la carpeta de activos y luego aplique fontfamily: '' sus fuentes


-1

Para nuevos lectores

Puedes usar esta biblioteca Vistas de fuentes personalizadas de Gloxey

dependencia de gradle

  dependencies{
           compile 'io.gloxey.cfv:custom-font-views:1.0.2'
    }

¿Cómo utilizar?

Crear activos de carpeta -> fuentes . Copie sus fuentes en fuentes carpeta de .

Use la aplicación de propiedad : font_name = "font_name_string" para aplicar la fuente a la vista.

Ejemplo

   <!--Font Names in srings.xml-->
       <string name="aadhunik">aadhunik.ttf</string>
       <string name="kung_fool">kungfool.ttf</string>
       <string name="skrova">skrova.otf</string>
       <string name="painting_in_the_sun_light">painting_in_the_sun_light.ttf</string>

   <!--Include views in layout.xml-->
       <io.gloxey.cfv.CFTextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Aadhunik"
       android:textColor="#ff00"
       android:textSize="40sp"
       app:font_name="@string/aadhunik" />

       <io.gloxey.cfv.CFButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Kung Fool"
       android:textColor="#154748"
       app:font_name="@string/kung_fool" />

       <io.gloxey.cfv.CFEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Hello world"
       android:textSize="30sp"
       app:font_name="@string/skrova" />

       <io.gloxey.cfv.CFCheckBox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="Painting In The Sun Light"
       android:textSize="30sp"
       app:font_name="@string/painting_in_the_sun_light" />
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.