prefácio
Este artigo apresenta o Android para implementar fontes personalizadas de configuração global e fontes personalizadas de configuração local, ou seja, definir fontes para um único TextView. Ao mesmo tempo, também fornece algumas excelentes estruturas de fontes tripartidas, que podem basicamente atender a todos os requisitos de desenvolvedores para configurações de fonte.
Efeitos antes e depois de usar fontes personalizadas
1. O que são ativos?
Em primeiro lugar, você precisa entender os ativos do Android .Resumindo, suas imagens e arquivos SVG são colocados em res/drawabe do projeto, e os arquivos de fonte usados para definir a fonte estão localizados em ativos. Como criar um diretório de ativos, clique para entrar
2. Fonte global do APP
2.1. Biblioteca de importação
O código é o seguinte (exemplo):
//Usado para definir a implementação da fonte global do aplicativo 'uk.co.chrisjenx:caligrafia:2.2.0'
2.2. Inicializar a caligrafia no aplicativo
O código é o seguinte (exemplo):
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); instância = isso; //app字体 CalligraphyConfig.initDefault( new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/OpenSans-Regular.ttf") .setFontAttrId(R.attr.fontPath) .build() ); } public static LightMeterApplication getInstance() { retornar instância; } }
Configure um MyApplication personalizado em AndroidManifest.xml para substituir o aplicativo padrão
<application android:name=".MyApplication" android:allowBackup="false" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@ estilo/AppTheme">
Abaixo está o meu diretório de fontes
Baixe a fonte, clique para inserir o código de extração: 2555 Você também pode importar a fonte que vem com o Windows, o caminho da fonte: C:\Windows\Fonts Meu Win10 vem com 263 arquivos de fonte, a seguir é uma captura de tela do arquivo de fonte
2.3. Permitir que a atividade especificada configure fontes personalizadas
substituir attachBaseContext
2.3.1 Configurações do Java
//A atividade que não foi reescrita ainda é a fonte padrão do Android @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); }
2.3.2 configurações do kotlin
override fun attachBaseContext(newBase: Context) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)) }
2.4 Erro de ambiente de desenvolvimento Android Q e Android X
Se o seu projeto atualizar o ambiente AndroidX e depurar no Android Q, o seguinte erro será relatado
E/AndroidRuntime: EXCEÇÃO FATAL: processo principal : com.bigcat.edulearnaid, PID: 21204 java.lang.RuntimeException: não é possível iniciar a atividade ComponentInfo{com.bigcat.edulearnaid/com.bigcat.edulearnaid.ui.StartActivity}: android. view.InflateException: Linha de arquivo XML binário nº 17 em com.bigcat.edulearnaid:layout/abc_screen_simple: Linha de arquivo XML binário nº 17 em com.bigcat.edulearnaid:layout/abc_screen_simple: Erro ao inflar a classe androidx.appcompat.widget.FitWindowsLinearLayout no android .app.ActivityThread.performLaunchActivity(ActivityThread.java:3895)
Solução :
Adicione as seguintes dependências no projeto build.gradle para substituir uk.co.chrisjenx:calligraphy:2.2.0
implementação 'io.github.inflationx:calligraphy3:3.1.1' implementação 'io.github.inflationx:viewpump:2.0.3'
Inicialize no onCreate() do aplicativo:
2.4.1 configurações de java
ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build())) .build()) ;
2.4.2 Configurações do Kotlin
ViewPump.init( ViewPump.builder() .addInterceptor( CalligraphyInterceptor( CalligraphyConfig.Builder() .setDefaultFontPath("你的字体") .setFontAttrId(R.attr.fontPath) .build() ) .build( ) )
@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); }
2.5 Use o tema para modificar a fonte global
No aplicativo, android:theme
configure um tema de aplicativo por meio de . Geralmente, os projetos recém-criados são arquivos @style/AppTheme
. Adicione as propriedades sobre a fonte nele android:fontFamily
e pode concluir a configuração global de uma fonte do sistema.
3. Defina a fonte de um único TextView
Ao contrário da configuração de fontes globais, não há necessidade de configurar o aplicativo, não há necessidade de introduzir a caligrafia da biblioteca dependente e ainda precisa configurar o caminho da fonte, use o seguinte método para concluir a configuração da fonte
3.1 Implementação usando Typeface + .ttf
3.1.1 java
Tipo de letra protegido tfRegular;//Definir fonte { tfRegular = Typeface.createFromAsset(getActivity().getAssets(), "fonts/OpenSans-Regular.ttf");//Inicializar fonte textView.setTypeface(tfRegular); }
3.1.2 kotlin
protected var tfRegular: Typeface? = null // define a fonte get() = field ?: Typeface.createFromAsset(requireActivity().assets, "fonts/OpenSans-Regular.ttf") // inicializa a fonte textView.typeface = tfRegular / / definir fonte
3.2 Use fontes próprias do SDK
noraml (fonte comum, a fonte usada pelo sistema por padrão) sans (fonte sem serifa) serif (fonte com serifa) monospace (fonte monoespaçada)
3.2.1 Implementação através de xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="580.6Ix" android:gravity="center" android:textStyle="bold" android:textSize="20sp" android:typeface=" serif" android:textColor="@color/white"/> <!-- android:textStyle="bold" font bold --> <!-- android:letterSpacing="0.2" fonte aumentar espaçamento --> <! - - android:typeface="serif" Defina a própria fonte do SDK -->
3.2.2 Implementação através de código lógico Java
vSansText = (TextView) findViewById(R.id.sans); vSerifText = (TextView) findViewById(R.id.serif); vMonospaceText = (TextView) findViewById(R.id.monospace); //Configuração do arquivo vSansText.setTypeface(Typeface.SANS_SERIF); vSerifText.setTypeface(Typeface.SERIF); vMonospaceText.setTypeface(Typeface.MONOSPACE);
3.2.3 Implementação através do código lógico kotlin
vSansText = findViewById(R.id.sans) vSerifText = findViewById(R.id.serif) vMonospaceText = findViewById(R.id.monospace) // 设置字体样式 vSansText.typeface = Typeface.SANS_SERIF vSerifText.typeface = Typeface.SERIF vMonospaceText.typeface = Typeface.MONOSPACE
3.3 Use o RoBoto para definir fonte em xml
As fontes que podem ser personalizadas por meio de xml incluem Roboto. Depois do Android 4.0, Roboto é usado como fonte padrão. Se você quiser saber mais sobre Robote, pode acessar o site do Google para visualizá- lo . Veja como usá-lo:
3.3.1 Use android:fontFamily em xml
android:fontFamily="sans-serif" // robô normal android:fontFamily="sans-serif-light" // robô leve android:fontFamily="sans-serif-condensed" // robô condensado android:fontFamily="sans- serif-thin" // roboto thin (android 4.2) // em combinação com android:textStyle="normal|bold|italic"
As fontes normal e sans são na verdade as mesmas, serif é uma fonte serif e nonospace é uma fonte monoespaçada.
serif adiciona serifas à fonte padrão. E o não-espaço limita a largura de cada caractere, para que eles alcancem um efeito de largura igual.
3.3.2 atributo do parâmetro fontFamily
A fonte | características do atributo |
---|---|
Regular | fonte padrão |
itálico | fonte itálico |
Audacioso | negrito |
Negrito itálico | negrito e itálico |
Luz | fonte sem serifa |
Itálico claro | sem serifa itálico |
Afinar | corpo fino |
Itálico fino | itálico fino |
Condensado regular | Usado para decoração de texto, exibição de informações, web design, corte de selos e fabricação de moldes[cr] |
Itálico condensado | versão em itálico cr |
negrito condensado | negrito cr |
negrito-itálico condensado | versão negrito itálico cr |
3.3.3 fontFamily carrega as fontes no pacote de recursos de fonte
1. Coloque a fonte baixada no seguinte arquivo
2. Referência em xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/anyeguihuapiaoxiang" android:text="Definir a fonte de um único TextView - através do arquivo de recurso de fonte" />
Deve-se observar que se typeface
e for configurado ao mesmo tempo, a fonte configurada fontFamily
será usada .fontFamily
3.4 estilo de texto
textStyle
É usado principalmente para definir o estilo de algumas fontes e é válido para todas as fontes. Ou seja, mesmo se você substituir a fonte, ainda poderá usar textStyle
para modificar seu estilo. Existem opções opcionais suportadas pelo próprio textStyle normal|bold|italic
, e também são muito fáceis de entender, ou seja 普通|粗体|斜体
.
3.4.1 Uso em xml
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Definir o font-textStyle de um único TextView" android:textStyle="bold|italic" />
3.5 Andorid 8.0+ define e usa fontes em recursos
1. Clique com o botão direito na pasta res e vá para Novo > Android Resource Directory. A janela Novo diretório de recursos é exibida.
2. Na lista Tipo de recurso, selecione uma fonte e clique em OK.
3. Adicione o arquivo de fonte à pasta de fontes.
4. Clique duas vezes no arquivo de fonte para visualizar a fonte do arquivo no editor.
Essas quatro etapas são para criar um arquivo de recurso de fonte e colocar a fonte baixada no arquivo
3.5.1 Criando fontes
1. Clique com o botão direito do mouse na pasta da fonte e vá para "Novo" > "Arquivo de recurso de fonte". A janela Novo arquivo de recurso é exibida.
2. Insira um nome de arquivo e clique em OK. Um novo XML de recurso de fonte será aberto no editor.
3. Encapsule cada arquivo de fonte, estilo e atributo de peso em um elemento <font>. O XML a seguir ilustra a adição de atributos relacionados à fonte no XML do recurso de fonte:
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle=" normal" android:fontWeight="400" android:font="@font/lobster_regular" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/lobster_italic" /> < /família de fontes>
3.5.2 Uso em TextView
No arquivo XML de layout, defina o atributo fontFamily para o arquivo de fonte que você deseja acessar.
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/lobster"/>
3.5.3 Chamada dinâmica
Typeface typeface = ResourcesCompat.getFont(context, R.font.lobster);
4. Excelente estrutura de função de fonte personalizada
4.1 Definindo estilos de texto por meio de Spannables
★ 659-
4.2 Tornar palavras-chave clicáveis sublinhadas TextView
UnderLineLinkTextView ★327 -
4.3 Aumentar o tamanho da fonte com gestos
PinchZoomTextView ★272 -
4.4 Codificar algumas frases com cores
ColorTextView ★214 -