Quero usar uma fonte personalizada para meu aplicativo Android que estou criando.
Posso alterar individualmente o tipo de letra de cada objeto do Code, mas tenho centenas deles.
Assim,
- Existe uma maneira de fazer isso a partir do XML? [Definindo uma fonte personalizada]
- Existe uma maneira de fazer isso a partir do código em um lugar, para dizer que todo o aplicativo e todos os componentes devem usar o tipo de letra personalizado em vez do padrão?
Respostas:
Não, desculpe. Você só pode especificar as fontes internas por meio de XML.Não que eu saiba.Há uma variedade de opções para eles hoje em dia:
Recursos de fonte e backports no Android SDK, se você estiver usando
appcompat
Bibliotecas de terceiros para quem não usa
appcompat
, embora nem todas suportem a definição da fonte nos recursos de layoutfonte
Sim, é possível.
Você deve criar uma visualização personalizada que amplie a visualização do texto.
Em
attrs.xml
navalues
pasta:Em
main.xml
:Em
MyTextView.java
:fonte
TextView
. Exigirá subclasses personalizadas para cada classe de widget que herda deTextView
onde o mesmo recurso é desejado.Eu fiz isso de uma forma mais "força bruta" que não requer alterações no xml de layout ou nas Atividades.
Testado no Android versão 2.1 a 4.4. Execute isso na inicialização do aplicativo, em sua classe de aplicativo:
Para um exemplo mais completo, veja http://github.com/perchrh/FontOverrideExample
fonte
code
<style name = "AppTheme" parent = "AppBaseTheme"> <item name = "android: typeface"> monoespaço </item> </style>code
, funcionará, mas não para negrito. Eu adicionei este código em uma classe que estende Application. esse é o lugar correto? @ P-chanEmbora eu esteja votando positivamente na resposta de Manish como o método mais rápido e direcionado, também vi soluções ingênuas que apenas iteram recursivamente por meio de uma hierarquia de visualização e atualizam as fontes de todos os elementos por sua vez. Algo assim:
Você precisaria chamar esta função em suas visualizações após inflar o layout e nos
onContentChanged()
métodos de sua Activity .fonte
Consegui fazer isso de forma centralizada, aqui está o resultado:
Tenho a seguir
Activity
e estendo a partir dela se precisar de fontes personalizadas:Mas se estou usando uma atividade do pacote de suporte, por exemplo
FragmentActivity
, eu uso issoActivity
:Não testei este código com
Fragment
s ainda, mas espero que funcione.My
FontUtils
is simple, que também resolve o problema pré-ICS mencionado aqui https://code.google.com/p/android/issues/detail?id=9904 :fonte
Ei, eu também preciso de 2 fontes diferentes no meu aplicativo para widgeds diferentes! Eu uso desta forma:
Na minha classe Application, crio um método estático:
O tipo de letra String representa o xyz.ttf na pasta de ativos. (eu criei uma classe Constants) Agora você pode usar isso em qualquer lugar em seu aplicativo:
O único problema é que você precisa disso para cada widget em que deseja usar o Font! Mas acho que essa é a melhor maneira.
fonte
Usando a sugestão de pospi e trabalhando com a propriedade 'tag' como Richard fez, eu criei uma classe personalizada que carrega minhas fontes personalizadas e as aplica às visualizações de acordo com suas tags.
Basicamente, em vez de definir o TypeFace no atributo android: fontFamily, você está usando android: tag attritube e defini-lo como um dos enums definidos.
Em sua atividade ou fragmento, você acabou de chamar
fonte
Encontrei uma boa solução no blog da Lisa Wray . Com a nova vinculação de dados, é possível definir a fonte em seus arquivos XML.
Em XML:
fonte
Acho que pode haver uma maneira mais prática de fazer isso. A classe a seguir definirá uma face de tipo personalizada para todos os componentes do seu aplicativo (com uma configuração por classe).
fonte
As implementações padrão do LayoutInflater não suportam a especificação do tipo de fonte do xml. No entanto, vi isso ser feito em xml, fornecendo uma fábrica personalizada para o LayoutInflater que analisará esses atributos da tag xml.
A estrutura básica gostaria disso.
Este artigo fornece uma explicação mais detalhada desses mecanismos e como o autor tenta fornecer suporte de layout xml para fontes dessa forma. O código para a implementação do autor pode ser encontrado aqui .
fonte
Definindo uma fonte personalizada para um ProgressDialog / AlertDialog regular:
fonte
Sim, é possível substituindo o tipo de letra padrão. Segui esta solução e funcionou perfeitamente para todos os textos TextViews e ActionBar com uma única alteração.
styles.xml
Em vez de themes.xml, conforme mencionado no link acima, mencionei a fonte padrão para substituir em meu styles.xml em minha tag de tema de aplicativo padrão. As fontes padrão que podem ser substituídas são serif, sans, monoespaçada e normal.
TypefaceUtil.java
Inicialmente, eu não sabia que as fontes a serem sobrescritas eram fixas e um conjunto de valores definidos, mas eventualmente isso me ajudou a entender como o Android lida com fontes e fontes e seus valores padrão, o que é um ponto diferente.
fonte
Não sei se isso muda todo o aplicativo, mas consegui mudar alguns componentes que não poderiam ser alterados ao fazer isto:
fonte
Gosto da sugestão do pospi. Por que não usar a propriedade 'tag' de uma visualização (que você pode especificar em XML - 'android: tag') para especificar qualquer estilo adicional que você não pode fazer em XML. Eu gosto de JSON, então usaria uma string JSON para especificar um conjunto de chave / valor. Esta classe faz o trabalho - basta chamar
Style.setContentView(this, [resource id])
sua atividade.Obviamente, você gostaria de lidar com mais do que apenas o tipo de letra para fazer valer a pena usar JSON.
Um benefício da propriedade 'tag' é que você pode defini-lo em um estilo base que você usa como um tema e, portanto, aplicá-lo a todas as suas visualizações automaticamente. EDIT: Fazer isso resulta em uma falha durante a inflação no Android 4.0.3. Você ainda pode usar um estilo e aplicá-lo às visualizações de texto individualmente.
Uma coisa que você verá no código - algumas visualizações têm uma tag sem uma explicitamente definida - estranhamente é a string 'Αποκοπή' - que é 'cortada' em grego, de acordo com o google tradutor! Que diabos...?
fonte
A resposta de @ majinboo é revisada para gerenciamento de desempenho e memória. Qualquer atividade relacionada a mais de uma fonte pode usar esta classe Font, fornecendo o próprio construtor como parâmetro.
A classe revisada de fontes é a seguinte:
fonte
Trabalhando para Xamarin.Android:
Classe:
Implementação do aplicativo:
Estilo:
fonte
Parece que o uso de fontes personalizadas ficou mais fácil com o Android O, você pode basicamente usar o xml para conseguir isso. Anexei um link para a documentação oficial do Android para referência e espero que isso ajude as pessoas que ainda precisam desta solução. Trabalhar com fontes personalizadas no Android
fonte
Pode ser útil saber que a partir do Android 8.0 (API de nível 26), você pode usar uma fonte personalizada em XML .
Simplificando, você pode fazer isso da seguinte maneira.
Coloque a fonte na pasta
res/font
.Use-o no atributo de um widget
<Button android:fontFamily="@font/myfont"/>
ou colocá-lo em
res/values/styles.xml
e usá-lo como um estilo
fonte
Use o atributo "fontPath" diretamente no arquivo xml.
para uso em style.xml
<item name = "fontPath"> fonts / ProximaNovaSemibold.ttf </item>
para uso em arquivo de layout direto
fontPath = "fonts / ProximaNovaBold.ttf"
(Observação: não há necessidade de usar o atributo app / android no prefixo)
fonte
É absolutamente possível. Muitas maneiras de fazer isso. A maneira mais rápida, crie uma condição com o método try-catch .. tente uma determinada condição de estilo de fonte, identifique o erro e defina o outro estilo de fonte.
fonte