Como usar fonte personalizada em um projeto escrito no Android Studio

Respostas:

335

Atualização 2020:

Crie uma pasta chamada fonte dentro da pasta res e copie sua fonte

insira a descrição da imagem aqui

<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))
Asim Roy
fonte
10
Qualquer pessoa que carregue fontes personalizadas de ativos deve observar que há um erro no Android 5.0 em que algumas fontes não são carregadas. Embora esse problema tenha sido corrigido no Android 5.1, uma solução alternativa para o suporte ao 5.0 é reescrever as fontes ttf. Consulte esta edição para obter mais informações stackoverflow.com/questions/27269264/…
BrentM 1/15/15
A segunda opção funcionou perfeitamente para mim. Obrigado por isso!
Emzor
2
i usado this.getContext () getApplicationContext () getAssets () para encontrar o diretório (estúdio android 2.1)..
kuzdu
1
@kuthue onCreate () está bem. Se você quiser alterar a fonte enquanto o usuário estiver usando o aplicativo, poderá colocá-lo no ponto em que deseja que ele seja alterado. Isso funciona também para os botões
rockhammer
1
Como posso definir que a fonte padrão para todo o projeto seja a fonte personalizada que estou adicionando? É isso que o primeiro exemplo de código está fazendo?
Yonatan Nir
97

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

  1. Selecione Arquivo> Novo> Pasta> Pasta de Ativos

  2. Clique em terminar

  3. Clique com o botão direito do mouse em ativos e crie uma pasta chamada fontes

  4. Coloque seu arquivo de fonte em ativos > fontes

  5. Use o código abaixo para alterar a fonte do seu textView

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);
Ehsan.R
fonte
12
como usar isso em xml?
Suisse
4
Este tutorial mostra como usá-lo em um XML: stacktips.com/tutorials/android/…
Dinesh
@Suisse A Biblioteca de suporte 26 fornece suporte completo a esse recurso em dispositivos que executam o link da
Ehsan.R 27-17
65

Existem várias maneiras de definir a família de fontes personalizadas no campo e estou usando assim abaixo.

Para adicionar fontes como recursos, execute as seguintes etapas no Android Studio:

1) Clique com o botão direito do mouse na pasta res e vá para Novo> diretório de recursos do Android. A janela Novo Diretório de Recursos é exibida.

2) Na lista Tipo de recurso, selecione a fonte e clique em OK.

Nota: O nome do diretório de recursos deve ser fonte.

3) Adicione seus arquivos de fonte na pasta fonte. insira a descrição da imagem aqui

Adicione a fonte na visualização desejada no seu arquivo xml:

insira a descrição da imagem aqui

Nota: Mas você solicitou o seguinte para isso:

  1. Android Studio acima para 3.0 canary.

  2. Sua atividade estende AppCompatActivity.

  3. Atualize seu arquivo Gradle assim:

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

buildtoolsVersionacima de 26 e mínimo targetSdkVersionexigido 26

  1. Inclua dependências no arquivo 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
Vinod Makode
fonte
41

Acho que, em vez de baixar o arquivo .ttf, podemos usar fontes do Google. É muito fácil de implementar. somente você tem que seguir estas etapas. etapa 1) Abra o layout.xml do seu projeto e a família de fontes selecionadas da exibição de texto em atributos (para a captura de tela de referência anexada) insira a descrição da imagem aqui

etapa 2) Na família de fontes selecione Mais fontes .. se a fonte não estiver lá. então você verá uma nova janela se abrir; aí você pode digitar a fonte desejada e selecionar a fonte desejada nessa lista, por exemplo) Regular, Negrito, Itálico etc. como mostrado na imagem abaixo. insira a descrição da imagem aqui

Etapa 3) Em seguida, você observará que uma pasta de fontes será gerada automaticamente na pasta / res com o arquivo xml de fontes selecionado.

insira a descrição da imagem aqui

Em seguida, você pode usar diretamente essa família de fontes no xml como

      android:fontFamily="@font/josefin_sans_bold"

ou pro gramaticamente, você pode conseguir isso usando

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);
Sandeep Sankla
fonte
Esta não é uma resposta para a pergunta. Nem todas as fontes estão disponíveis no Google Fonts.
Matt Fletcher
2
Boa resposta! Se você não encontrar sua fonte na lista - carregue-a na pasta assets ou defina-a através do xml
Edgar Khimich
21

Olá, aqui temos uma maneira melhor de aplicar fontes em EditTexts e TextViews no android de uma só vez e aplicá-las em todo o projeto.

Antes de tudo, você precisa criar a pasta de fontes. Aqui estão os passos.

1: Vá para (pasta do projeto) e, em seguida, app> src> main

2: Crie pastas denominadas 'assets / fonts' na pasta principal.

3: Coloque suas fontes na pasta de fontes. Aqui eu tenho 'MavenPro-Regular.ttf'

Aqui estão as etapas para aplicar fontes personalizadas no EditText e, usando essa abordagem, você pode aplicar fontes em cada entrada.

1: Crie uma classe MyEditText (seu nome preferido ...)

2: que estende o EditText

3: aplique sua fonte

Aqui está o código Exemplo;

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);
        }
    }

}

E aqui está o código de como usá-lo.

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

editText.setText("Hello");

Ou no seu arquivo 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"
    />
Mohammad Naim Dahee
fonte
Essa classe me deu esse erro no tempo de execução: Erro ao inflar a classe MyEditText
GMX
Consulte este link, você pode encontrar algumas dicas sobre como resolver o erro.
Mohammad Naim Dahee
Com a compilação atual, acho que você precisaria alterar isso para "estende AppCompatEditText".
Diesel
15

Com a Biblioteca de suporte 26.0 (e o Android O), as fontes podem ser carregadas facilmente dos recursos com: insira a descrição da imagem aqui

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

Documentos para o método .

Mais informações podem ser encontradas aqui.

Makata
fonte
9

Quero adicionar minha resposta para o Android-O e o Android Studio 2.4

  1. Crie uma pasta chamada fonte na pasta res . Faça o download das várias fontes que você deseja adicionar ao exemplo de fontes do Google do seu projeto

  2. Dentro da sua família de fontes xml user

    exemplo:

    <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.Se você quiser que seja de maneira programática, use o código a seguir

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

para obter mais informações, siga o link para minha postagem no blog Estilos de fonte para Android com Android Studio 2.4

Suresh Maidaragi
fonte
6
Observe que se você deseja promover seu próprio produto / blog, deve divulgar sua afiliação ; caso contrário, sua resposta poderá ser sinalizada como spam. Por favor, leia Como não ser um spammer
DavidPostill
Sim @PetterFriberg
Suresh Maidaragi
8

Conforme o novo recurso disponível no Android O, os recursos de fonte em XML estão disponíveis como novo recurso.

Para adicionar fontes como recursos, execute as seguintes etapas no Android Studio:

1) Clique com o botão direito do mouse na pasta res e vá para Novo> diretório de recursos do Android . A janela Novo Diretório de Recursos é exibida.

2) Na lista Tipo de recurso, selecione a fonte e clique em OK.

Nota: O nome do diretório de recursos deve ser fonte.

3) Adicione seus arquivos de fonte na pasta fonte.

Você pode acessar os recursos da fonte com a ajuda de um novo tipo de recurso, a fonte. Por exemplo, para acessar um recurso de fonte, use @ font / myfont ou R.font.myfont.

por exemplo. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);

Dharmishtha
fonte
2
deve ser ResourcesCompat.getFont (contexto, R.font.your_font)
Trung Le
7

Você pode usar a biblioteca fácil e simples de terceiros EasyFonts para definir uma variedade de fontes personalizadas para o seu TextView. Ao usar esta biblioteca, você não precisa se preocupar em baixar e adicionar fontes na pasta assets / fonts. Também sobre a criação de objetos Typeface. Você estará livre de criar uma pasta de ativos também.

Simplesmente:

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

Existem muitos tipos de fontes fornecidos por esta biblioteca.

Vijay Vankhede
fonte
6

1º adicione o arquivo font.ttf na pasta Font. Em seguida, adicione esta linha no método onCreate

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

E aqui está o meu 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"
        />
DEVSHK
fonte
4
  1. Crie ativos de pasta em Projeto -> aplicativo (ou nome do seu aplicativo) -> src -> principal -> clique com o botão direito do mouse -> Novo -> Diretório.
  2. Em seguida, crie um novo diretório dentro dos ativos chamado "fontes".

Para atribuir a fonte ao textView:

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

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

your_font_name inclui extensão de fonte.

GmloMalo
fonte
3

Se você é muito novo no Android como eu, isso pode ser um pouco complicado. Certifique-se de ligar para:

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

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

user4509901
fonte
3

O Android 8.0 (API 26) introduziu novos recursos relacionados a fontes.

1) As fontes podem ser usadas como recursos.

2) Fontes para download.

Se você quiser usar fontes externas em seu aplicativo para Android, poderá incluir arquivos de fontes no apk ou configurar fontes para download.

Incluindo arquivos de fonte no APK : você pode baixar arquivos de fonte, salvá-los em res / font arquivador, definir família de fontes e usar família de fontes em estilos.

Para obter mais detalhes sobre o uso de fontes personalizadas como recursos, consulte http://www.zoftino.com/android-using-custom-fonts

Configurando fontes para download : Defina a fonte fornecendo detalhes do provedor, adicione o certificado do provedor e use a fonte nos estilos.

Para obter mais detalhes sobre fontes para download, consulte http://www.zoftino.com/downloading-fonts-android

Arnav Rao
fonte
2
Documentação oficial: developer.android.com/guide/topics/ui/look-and-feel/…
Parziphal
1
Além disso, apenas porque as fontes Personalizadas / para Download foram introduzidas no Android O (8.0), não significa que não há compatibilidade com versões anteriores. Consulte a documentação oficial sobre como implementar fontes personalizadas. Observe que também pode ser necessário instalar o Android Studio 3.0.
Anthonymonori
1

Primeiro crie uma assetspasta e depois crie uma fontspasta nela.

Então você pode definir a fontpartir assetsou directorycomo abaixo:

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);
        }
    }
} 

fonte
1

Agora, existem muitas maneiras de aplicar a fonte. Uma das maneiras mais fáceis é a seguinte: 1) Clique com o botão direito do mouse na pasta res, vá para Novo> diretório de recursos do Android.

2) Na lista Tipo de recurso, selecione a fonte e clique em OK.

3) Coloque seus arquivos de fonte na pasta fonte.

Priya
fonte
1

Adicione suas fontes à pasta assets em app / src / main / assets para criar uma visualização 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))
}

}

Adicione FontCache: para que você não precise criar tipos de letra repetidamente 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")
}

}

E você está pronto!

PSFrom android O, você pode adicionar fontes diretamente.

ROHIT LIEN
fonte
1

coloque fontes na pasta de ativos e aplique fontfamily: '' suas fontes


fonte
-1

Para novos leitores

Você pode usar esta biblioteca Gloxey Custom Font Views

dependência gradle

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

Como usar?

Crie ativos de pasta -> fontes . Copie suas fontes para a pasta de fontes .

Use a propriedade app: font_name = "font_name_string" para aplicar a fonte na exibição.

Exemplo

   <!--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" />
Adnan Bin Mustafa
fonte