Estou tentando definir um layout de GUI usando arquivos XML no Android. Pelo que pude descobrir, não há como especificar que seus widgets devem usar uma fonte personalizada (por exemplo, uma que você colocou em assets / font /) em arquivos XML e você só pode usar as fontes instaladas no sistema.
Eu sei que, no código Java, eu poderia alterar a fonte de cada widget manualmente usando IDs exclusivos. Como alternativa, eu poderia percorrer todos os widgets em Java para fazer essa alteração, mas isso provavelmente seria muito lento.
Que outras opções eu tenho? Existe alguma maneira melhor de criar widgets com uma aparência personalizada? Eu particularmente não quero ter que alterar manualmente a fonte para cada novo widget adicionado.
Respostas:
Você pode estender o TextView para definir fontes personalizadas, como aprendi aqui .
TextViewPlus.java:
attrs.xml: (em res / valores)
main.xml:
Você colocaria "saxmono.ttf" na pasta de ativos .
ATUALIZAÇÃO 1/8/13
Há sérias preocupações de memória com esse método. Veja o comentário de chedabob abaixo.
fonte
xmlns:foo="http://schemas.android.com/apk/res/com.example
Estou 3 anos atrasado para a festa :( No entanto, isso pode ser útil para alguém que possa encontrar este post.
Eu escrevi uma biblioteca que armazena em cache tipos de letra e também permite que você especifique tipos de letra personalizados diretamente do XML. Você pode encontrar a biblioteca aqui .
Aqui está a aparência do seu layout XML quando você o usar.
fonte
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
mas isso não funcionou.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Pode ser um pouco tarde, mas você precisa criar uma classe singleton que retorne o tipo de letra personalizado para evitar vazamentos de memória.
Classe TypeFace:
TextView personalizado:
Por xml:
Programaticamente:
fonte
Pergunta antiga, mas com certeza gostaria de ler esta resposta aqui antes de iniciar minha própria busca por uma boa solução. A caligrafia estende o
android:fontFamily
atributo para adicionar suporte a fontes personalizadas na sua pasta de ativos, da seguinte forma:A única coisa que você precisa fazer para ativá-lo é anexá-lo ao contexto da atividade que você está usando:
Você também pode especificar seu próprio atributo personalizado para substituir
android:fontFamily
Também funciona em temas, incluindo o AppTheme.
fonte
Usando DataBinding :
Em XML:
arquivo de fonte deve estar em
assets/fonts/
fonte
Se você tiver apenas um tipo de letra que gostaria de adicionar e desejar menos código para escrever, poderá criar um TextView dedicado para sua fonte específica. Veja o código abaixo.
No main.xml, agora você pode adicionar seu textView assim:
fonte
A melhor maneira de fazer isso Na versão de pré-visualização do Android O, é assim:
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.
3.) Adicione seus arquivos de fonte na pasta de fontes . A estrutura de pastas abaixo gera R.font.dancing_script, R.font.la_la e R.font.ba_ba.
4.) Clique duas vezes em um arquivo de fonte para visualizar as fontes do arquivo no editor.
Em seguida, devemos criar uma família de fontes
1.) Clique com o botão direito do mouse na pasta fonte e vá para Novo> Arquivo de Recurso Fonte . A janela Novo arquivo de recurso é exibida.
2.) Digite o nome do arquivo e clique em OK . O novo XML do recurso de fonte é aberto no editor.
3.) Coloque cada atributo de arquivo, estilo e peso da fonte no elemento da tag da fonte. O XML a seguir ilustra como adicionar atributos relacionados à fonte no XML do recurso de fonte:
Adicionando fontes a um TextView:
A partir da documentação
todas as etapas estão corretas.
fonte
Estenda
TextView
e atribua a ele um atributo personalizado ou apenas use o atributo android: tag para passar uma String de qual fonte você deseja usar. Você precisará escolher uma convenção e cumpri-la, pois eu colocarei todas as minhas fontes na pasta res / assets / fonts / para que sua classe TextView saiba onde encontrá-las. Então, no seu construtor, você apenas define a fonte manualmente após a super chamada.fonte
A única maneira de usar fontes personalizadas é através do código fonte.
Lembre-se de que o Android roda em dispositivos com recursos e fontes muito limitados, podendo exigir uma boa quantidade de RAM. As fontes internas do Droid são feitas especialmente e, se você notar, faltam muitos caracteres e decorações.
fonte
Talvez eu tenha uma resposta simples para a pergunta sem estender o TextView e implementar um código longo.
Código:
Coloque o arquivo de fonte personalizado na pasta de ativos, como de costume, e tente isso. Funciona para mim. Eu simplesmente não entendo por que Peter deu um código tão grande para essa coisa simples ou ele deu sua resposta na versão antiga.
fonte
Também pode ser definido no xml sem criar classes personalizadas
style.xml
activity_main.xml
Uma observação rápida, porque eu sempre esqueci onde colocar as fontes, é que a fonte deve estar dentro
assets
e essa pasta reside no mesmo nível queres
esrc
, no meu caso, éassets/fonts/ionicons.ttf
Atualizado o layout raiz adicionado, porque esse método precisa
xmlns:app="http://schemas.android.com/apk/res-auto"
funcionarAtualização 2 Esqueci uma biblioteca que eu instalei antes chamada Calligraphy
fonte
xmlns:app="http://schemas.android.com/apk/res-auto"
ao seu layout raiz, verifique a resposta atualizado tambémA resposta de Peter é a melhor, mas pode ser aprimorada usando o styles.xml do Android para personalizar suas fontes para todas as visualizações de texto em seu aplicativo.
Meu código está aqui
fonte
Existem duas maneiras de personalizar fontes:
!!! minha fonte personalizada em assets / fonts / iran_sans.ttf
Caminho 1: Tipo de atualização.class ||| melhor maneira
chamada FontsOverride.setDefaultFont () na classe estende Application. Esse código fará com que todas as fontes de software sejam alteradas, mesmo que brinda fontes
AppController.java
FontsOverride.java
Caminho 2: use setTypeface
para uma visualização especial, basta chamar setTypeface () para alterar a fonte.
CTextView.java
FontUtils.java
fonte
Aqui está um tutorial que mostra como configurar uma fonte personalizada como @peter descrita: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
também considera possíveis vazamentos de memória em http://code.google.com/p/android/issues/detail?id=9904 . Também no tutorial, há um exemplo para definir uma fonte personalizada em um botão.
fonte
Você pode criar facilmente uma classe de visualização de texto personalizada: -
Então, o que você precisa fazer primeiro, faça a
Custom textview
classe que foi estendidaAppCompatTextView
.Agora, toda vez texto personalizado chamada vista e vamos obter o valor int de atributo
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Ou
Também podemos obter getTypeface () da exibição que definimos em nosso xml (
android:textStyle="bold|normal|italic"
). Então faça o que você quiser.Agora, criamos
FontUtils
para definir qualquer fonte .ttf em nossa visualização.fonte
Pode ser útil saber que, a partir do Android 8.0 (nível 26 da API), você pode usar uma fonte personalizada em XML .
Você pode aplicar uma fonte personalizada a todo o aplicativo da seguinte maneira.
Coloque a fonte na pasta
res/font
.Em
res/values/styles.xml
uso no tema do aplicativo.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
fonte
Fontinator é uma biblioteca do Android que facilita o uso de fontes personalizadas. https://github.com/svendvd/Fontinator
fonte
Você não pode estender o TextView para criar um widget ou usá-lo em um layout de widgets: http://developer.android.com/guide/topics/appwidgets/index.html
fonte