É possível definir qualquer fonte personalizada em todos os controles do aplicativo? E não necessariamente em tempo de execução? (ou seja, de xml se possível ou apenas uma vez para todo o aplicativo no arquivo JAVA)
Posso definir a fonte para um controle a partir deste código.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
E o problema com esse código é que ele deve ser chamado para todos os controles. E eu quero chamar isso ou qualquer método semelhante uma vez, ou se possível definir a propriedade em xml. É possível?
android
fonts
textview
android-fonts
Prasham
fonte
fonte
VIEW
vez de escrever umcustom text view
e umcustom button view
separadamente? Meu requisito é para todos os controles, e a visualização de texto foi apenas um exemplo. Desculpe, esqueci de mencionar isso .. :-(Respostas:
EDIT : Já faz um tempo e gostaria de acrescentar o que acho que é a melhor maneira de fazer isso, nada menos que por meio de XML!
Então, primeiro, você vai querer fazer uma nova classe que substitui qualquer View que você deseja personalizar. (por exemplo, deseja um botão com uma fonte personalizada? Estender
Button
). Vamos dar um exemplo:Agora, se você não tiver um, adicione um documento XML em
res/values/attrs.xml
e adicione:Ok, então com isso fora do caminho, vamos voltar ao
parseAttributes()
método anterior:Agora você está pronto. Você pode adicionar mais atributos para qualquer coisa (você pode adicionar outro para typefaceStyle - negrito, itálico, etc.), mas agora vamos ver como usá-lo:
A
xmlns:custom
linha pode realmente ser qualquer coisa, mas a convenção é o que é mostrado acima. O que importa é que ele seja único e é por isso que o nome do pacote é usado. Agora você apenas usa ocustom:
prefixo para seus atributos e oandroid:
prefixo para atributos do Android.Uma última coisa: se você quiser usar isso em um estilo (
res/values/styles.xml
), você deve não adicionar axmlns:custom
linha. Basta fazer referência ao nome do atributo sem prefixo:Usando uma fonte personalizada no Android
Isso deve ajudar. Basicamente, não há como fazer isso em XML e, até onde sei, não há maneira mais fácil de fazer isso em código. Você sempre pode ter um método setLayoutFont () que cria o tipo de letra uma vez e, em seguida, executa setTypeface () para cada um. Você apenas teria que atualizá-lo cada vez que adicionar um novo item a um layout. Algo como abaixo:
EDIT : Então, acabei de implementar algo como isso sozinho, e como acabei fazendo isso foi criar uma função como esta:
Depois, basta usar este método de onCreate () e passar todos os TextViews que deseja atualizar:
EDITAR 05/09/12:
Então, como isso ainda está recebendo visualizações e votos, gostaria de adicionar um método muito melhor e mais completo:
Se você passar a raiz do seu layout, ele verificará recursivamente por
TextView
ouButton
visualizações (ou quaisquer outras que você adicionar a essa instrução if) dentro desse layout e definirá a fonte sem que você precise especificá-los por ID. Isso, claro, pressupõe que você deseja definir a fonte para cada visualização.fonte
recycle
oTypedArray values
?xmlns:custom="http://schemas.android.com/apk/res-auto"
Existe uma maneira bastante fácil de fazer isso via XML. Você só precisa criar seu próprio widget que estenda TextView.
Primeiro, crie um arquivo em res / values / attrs.xml com o seguinte conteúdo:
Depois disso, crie seu widget personalizado:
Como você pode ver, o código acima lerá uma fonte dentro de ativos / pasta. Para este exemplo, estou assumindo que existe um arquivo chamado "custom.ttf" na pasta de ativos. Por fim, use o widget nos XMLs:
Nota: você não poderá ver sua fonte customizada no editor de layout do Eclipse. É por isso que coloquei o
isInEditMode()
cheque. Mas se você executar seu aplicativo, a fonte personalizada funcionará perfeitamente.Espero que ajude!
fonte
TextView
classe; configureitypeface
nele e usei o controle personalizado no layout como fazemos normalmente e funcionou para mim ... Era simples, porém, que o acima ...Exemplo de TextView com tipo de letra roboto:
attr.xml
RobotoTextView.java:
Exemplo de uso:
Recursos: fontes Roboto e Noto
fonte
É tarde demais, mas ajuda o outro,
eu criei CustomTextView que tem um atributo chamado typeFace e trata do problema de vazamento de memória com carregamento de fonte sem cache
Em primeiro lugar, a
Fonts
classe que carrega as fontes dos ativos apenas uma vezentão você precisa adicionar um atributo personalizado no attrs.xml adicionar este
então aula personalizada
e, finalmente, adicione a visualização de texto
e você pode alterar a fonte programaticamente com o método setTypeFace
também poderá mover o espaço de nomes personalizado para o seu layout principal se quiser usar mais do que um nesta janela
Happy Coding :)
fonte
O método a seguir, chamado em onCreate () e aprovado no ViewGroup mais externo, funcionará para tudo, exceto para texto criado dinamicamente (ou seja, listas dinâmicas, alertas, etc.). Uma maneira fácil de obter o ViewGroup mais externo é usar getRootView em qualquer uma de suas visualizações.
Isso deve funcionar para conteúdo dinâmico também, você apenas terá que chamá-lo, passando tudo o que você criou, logo depois de criá-lo (embora eu não testei isso).
Para economizar memória, você provavelmente desejará tornar o tipo de letra uma variável estática, em vez de criar um novo cada vez que o loop for executado como fiz aqui.
fonte
Se você está procurando uma solução programática mais geral, criei uma classe estática que pode ser usada para definir o Typeface de uma visualização inteira (Activity UI). Observe que estou trabalhando com Mono (C #), mas você pode implementá-lo facilmente usando Java.
Você pode passar a essa classe um layout ou uma visualização específica que deseja personalizar. Se você quiser ser supereficiente, poderá implementá-lo usando o padrão Singleton.
Em sua atividade, você precisará criar um objeto Typeface. Eu crio o meu no OnCreate () usando um arquivo .ttf colocado em meu diretório Resources / Assets /. Certifique-se de que o arquivo esteja marcado como um Ativo Android em suas propriedades.
fonte
Infelizmente, o Android não oferece a maneira rápida, fácil e limpa que você procura para alterar a fonte de todo o seu aplicativo. Mas recentemente eu investiguei este assunto e criei algumas ferramentas que permitem que você altere a fonte sem qualquer codificação (você pode fazer tudo através de xml, estilos e até mesmo aparências de texto). Eles são baseados em soluções semelhantes, como você vê nas outras respostas aqui, mas permitem muito mais flexibilidade. Você pode ler tudo sobre isso neste blog e ver o projeto github aqui .
Aqui está um exemplo de como aplicar essas ferramentas. Coloque todos os seus arquivos de fonte em
assets/fonts/
. Em seguida, declare essas fontes em um arquivo xml (por exemplores/xml/fonts.xml
) e carregue esse arquivo no início de seu aplicativo comTypefaceManager.initialize(this, R.xml.fonts);
(por exemplo, no onCreate de sua classe Application). O arquivo xml tem a seguinte aparência:Agora você pode usar essas fontes em seu estilo ou xml (desde que use as ferramentas que mencionei acima), usando o elemento de interface do usuário personalizado
com.innovattic.font.FontTextView
em seu layout xml. Abaixo, você pode ver como pode aplicar uma fonte a todos os textos em todo o seu aplicativo, apenas editandores/values/styles.xml
:Com o acompanhamento
res/layout/layout.xml
:Não se esqueça de aplicar o tema em seu manifesto Android.
fonte
Eu gostaria de adicionar uma observação à ótima solução de
leocadiotine
. É perfeito, mas ao usar este TextView Customizado muitas vezes desacelera a aplicação, pois ele tem que acessar os ativos toda vez que um TextView é criado. Sugiro usar algo comoView Holder pattern
noAdapters
, escrevi um exemplo:Dessa forma, o aplicativo acessa os ativos apenas uma vez por ativo e os mantém na memória para necessidades futuras.
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
Encontrei informações passo a passo neste link: https://github.com/jaydipumaretiya/CustomTypeface/
Há muitas maneiras de usar o tipo de letra corretamente no android, você tem que colocar o arquivo de tipo de letra na pasta de ativos em seu principal diretamente e pode usá-lo em tempo de execução.
Outra maneira mais simples é usar a biblioteca padrão para definir o tipo de letra em seu arquivo xml. Eu prefiro esta biblioteca de fonte personalizada para definir a fonte para TextView, EditText, Button, CheckBox, RadioButton e AutoCompleteTextView e outros wedget no Android.
fonte
O Android 8.0 (API de nível 26) apresenta um novo recurso, Fonts in XML. Você pode criar um arquivo fontfamily e configurá-lo em styles.xml.
Fonte: Fontes em XML
fonte