Título do centro da barra de ferramentas do Android e fonte personalizada
Estou tentando descobrir a maneira correta de usar uma fonte personalizada para o título da barra de ferramentas e centralizá-la na barra de ferramentas (requisito do cliente).
No momento, estou usando o bom e antigo ActionBar, e estava definindo o título como valor vazio e usando setCustomViewpara colocar minha fonte personalizada TextView e centralizá-lo usando ActionBar.LayoutParams.
Existe uma maneira melhor de fazer isso? Usando a nova barra de ferramentas como minha ActionBar.
android android-layout android-toolbar android-theme android-styles
— Mathbl
Para usar um título personalizado, Toolbarbasta lembrar que Toolbaré apenas um ViewGroup sofisticado, para que você possa adicionar um título personalizado da seguinte forma:
Isso significa que você pode estilizar o TextViewque quiser, porque é apenas regular TextView. Portanto, em sua atividade, você pode acessar o título da seguinte forma:
— MrEngineer13
sugerimos usar android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_gravity = "center".
Se alguém não puder remover o nome do aplicativo padrão, faça o seguinte: 1. Ligue para setSupportActionBar (yourToolbar) 2. Ligue para getSupportActionBar (). SetDisplayShowTitleEnabled (false);
— 21715 Rick
Para continuar usando estilos padrão para o TextView personalizado, tente algo como style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"( consulte esta resposta ).
— 31415 Jonik
acrescentando android: paddingRight = pode ajudar a centralizar o texto no meio da tela no caso de você ter um botão (casa, gaveta de navegação, etc) "attr / actionBarSize?"
— Gordak
O que acontecerá quando houver um ícone do Hamburger na barra de ferramentas? Não estará no centro da largura total da barra de ferramentas, estará no centro de ToolbarWidth - HamburgerIconWidth .
O título da barra de ferramentas é estiloso. Qualquer personalização que você fizer deve ser feita no tema. Eu vou te dar um exemplo.
Layout da barra de ferramentas:
Esta é a maneira correta. Adicionando outro TextViewé um pouco hacky, mas a resposta da reflexão é pura maldade.
— dariusl
Limpo, mas você não pode definir uma fonte personalizada a partir do estilo. Infelizmente.
— Niqueco 7/08
Você também não pode alterar o alinhamento do título.
@ user1560102 não há nada de hacky em adicionar um TextView à barra de ferramentas. Foi para isso que foi projetado.
— Tim Malseed
Isso não centraliza o texto.
Isso é apenas para ajudar a juntar todas as peças usando a resposta @ MrEngineer13 com @Jonik e @Rick Sanchez comentam com a ordem certa para ajudar a alcançar o título com facilidade!
O layout com TextAppearance.AppCompat.Widget.ActionBar.Title:
A maneira de alcançar com a ordem certa:
Por favor, não esqueça de votar no @ MrEngineer13 answer !!!
Aqui está um exemplo de projeto ToolbarCenterTitleSample
Espero ajudar alguém;)
— Gueorgui Obregon
se eu definir setDisplayHomeAsUpEnabled (true) e setDisplayShowHomeEnabled (true); para aumentar a seta para trás. Então o título não está chegando ao centro. Eu tentei como definir actionBar.setTitle (""); e setDisplayShowTitleEnabled (false). Mas ainda não é capaz de resolver o problema
— Prashanth Debbadwar
Você o testou para um Scrolling Activity?
é verdade que, com a seta para trás, o título não está centralizado (fica à direita pela metade da largura da seta para trás). Suponho que, se estivesse realmente determinado, adicionaria programaticamente uma margem suficiente à direita da caixa de texto, conforme necessário, a fim de centralizar o texto.
não temos acesso direto ao título TextView da barra de ferramentas, portanto usamos reflexão para acessá-lo.
— BugsBunnyBR
Embora isso seja hacky, esta solução funciona para mim depois de tentar encontrar uma maneira de obter acesso à visualização de texto da barra de ferramentas. Obrigado.
— falc0nit3
Funcionou muito bem para o título. Porém, quando tentou obter o mSubtitleTextView dessa maneira, resultou em uma exceção. Causado por: java.lang.NullPointerException: Tentativa de invocar o método virtual 'void android.widget.TextView.setTypeface (android.graphics.Typeface)' em uma referência de objeto nulo
Nota: Você pode acessar apenas o campo "mTitleTextView" depois de definir o título da barra de ferramentas! O campo é preguiçoso inicializado pelo seu primeiro uso.
E se você ofuscar seu código com o ProGuard e mTitleTextViewse tornar abcde12345?
@voghDev getDeclaredField lançará NoSuchFieldException nesse caso, resultando no código não funcionando.
Aqui está uma abordagem dependente do texto do título para encontrar a TextViewinstância Toolbar.
— Nikola Despotoski
Defina a seguinte classe:
... e apenas use-o em vez de regular Toolbarcomo este:
Você ainda precisa dessas 2 linhas de código no seu Activity(como no padrão Toolbar):
É isso aí! Você não precisa ocultar o título alinhado à esquerda padrão, não precisa duplicar o mesmo código XML repetidamente, etc., use apenas CenteredToolbarcomo se fosse o padrão Toolbar. Você também pode definir sua fonte personalizada programaticamente, pois agora você tem acesso direto ao TextView. Espero que isto ajude.
— fraggjkee
Obrigado! A melhor solução, só que não se esqueça de importar para a barra de ferramentas "v7.widget"
Sei que isso é bastante antigo, mas ... como posso mudar a cor do texto? Eu tentei em XML com app: titleTextColor e em código com centeredTitleTextView.setColor. Alguma idéia, @fraggjkee?
— Genaro Alberto Cancino Herrera
centeredTitleTextView.setTextColor(...)deve trabalhar
Não deveria ser LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)?
Ninguém mencionou isso, mas existem alguns atributos para Toolbar:
app:titleTextColor para definir a cor do texto do título
app:titleTextAppearance para definir a aparência do texto do título
app:titleMargin para definir a margem
E há outras margens específicas, como marginStartetc.
— Ab ِ
Solução perfeita .. se você está ciente de FontOverride , basta criar estilo em styles.xml <style name="customFontTextAppearanceStyle"> <item name="android:textSize">18sp</item> <item name="android:typeface">monospace</item> e aplicá-lo na barra de ferramentas app:titleTextAppearance="@styles/customFontTextAppearanceStyle"
— Chinmay Thoriya
Eu usei esse método, mas nada aconteceu na minha barra de ferramentas! Eu criei um novo '<style>' e defina-o app:titleTextAppearanc="style name" no android.support.v7.widget.ToolbarTAG
Eu uso esta solução:
Funciona muito bem, mas, por algum motivo, não é centralizado corretamente com barras de ferramentas que não possuem um botão de item.
— Munib 28/08
Uma adição: se você tiver um ícone de desenho ou de navegação na barra de ferramentas, o título não ficará exatamente no centro. Eu adiciono um ícone de menu de configuração vazio para esta situação. Meu item de menu vazio é: <item android: id = "@ + id / vazio" android: orderInCategory = "100" android: icon = "@ android: cor / transparente" app: showAsAction = "always" tools: ignore = " MenuTitle "/>
Sem a barra de ferramentas TextView, podemos personalizar a fonte usando o código abaixo
— Ajit Kumar Dubey
Se você apenas precisar alterar a fonte, esta parece ser a solução mais limpa. NOTA: TypefaceSpanString é apenas isso: stackoverflow.com/a/17961854
— Mohib Irshad
— Shatazone
A solução funciona muito bem quando você coloca as duas últimas linhas de código, não deve estar dentro do loop for: // Restaurar título e legenda toolbar.setTitle (originalTitle); toolbar.setSubtitle (originalSubtitle);
— maros136
Eu acho que "int width = maxWidth - titleWidth * 2;" deve ser "int width = maxWidth - iconWidth * 2;", pensa!
— oldfeel
Eu resolvi esta solução, e este é um dos seguintes códigos:
E você pode alterar o título / etiqueta. Em Atividade, escreva os códigos abaixo:
TextView mTitle = (TextView) toolbarTop.findViewById (R.id.toolbar_title); mTitle.setText ("@ string / ....");
Você pode usar como o seguinte
— A Sharma
Uma maneira muito rápida e fácil de definir uma fonte personalizada é usar uma personalizada titleTextAppearancecom fontFamily:
Adicione ao styles.xml :
Na sua pasta res, crie uma pasta de fontes (Ex: varela_round_regular.ttf )
Leia o guia oficial para saber mais https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
Não sei se alguma coisa mudou na biblioteca appcompat, mas é bastante trivial, sem necessidade de reflexão.
Solução que eu usei para esse problema:
Para a gravidade central, acho que seria necessário alterar os parâmetros de layout para match_parent horizontalmente e depois:
— Monet_z_Polski
Atualização da resposta de @ MrEngineer13: para alinhar o centro do título em qualquer caso, incluindo o ícone Hamburger, menus de opções, você pode adicionar uma FrameLayoutbarra de ferramentas na seguinte:
Em XML, tente o seguinte:
— mohamad sheikhi
Embora a adição de uma exibição de texto à barra de ferramentas possa resolver o problema da restrição de estilo de título, há um problema. Como não o estamos adicionando a um layout, não temos muito controle sobre sua largura. Podemos usar wrap_content ou match_parent.
Agora considere um cenário em que temos um searchView como um botão na borda direita da barra de ferramentas. Se o conteúdo do título for maior, ele aparecerá no topo do botão que o obscurece. Não há como controlar essa falta de definir uma largura para o rótulo e isso é algo que você não deseja fazer se quiser ter um design responsivo.
Então, aqui está uma solução que funcionou para mim que é um pouco diferente de adicionar uma visualização de texto à barra de ferramentas. Em vez disso, adicione a barra de ferramentas e a exibição de texto a um layout relativo e verifique se a exibição de texto está na parte superior da barra de ferramentas. Em seguida, podemos usar as margens apropriadas e garantir que a exibição do texto seja exibida onde queremos que seja exibida.
Certifique-se de definir a barra de ferramentas para não mostrar o título.
Aqui está o XML para esta solução:
Resolve o problema @ ankur-chaudhary mencionado acima.
— Deepak GM
Desde android.support.v7.appcompat 24.2 Toolbarhas method setTitleTextAppearancee você pode definir sua fonte sem fonte externa.textview .
crie um novo estilo em styles.xml
Passei vários dias procurando uma solução universal. Minha barra de ferramentas trabalhando com o menu do Android e o ícone de navegação.
Inicialmente, você precisa criar uma classe de barra de ferramentas personalizada. Esta classe deve ter calculado as posições centradas no título (preenchimentos):
Em segundo lugar, você precisa criar a barra de ferramentas de layout:
— Valery Boretsky
Tente usar a Barra de Ferramentas e inclinar em uma exibição separada. Dê uma olhada na extremidade direita e dê a eles peso igual ao peso da barra de ferramentas. Desta forma, o seu til vai entrar no centro.
Você pode inserir esse código no seu arquivo xml
— Uzair Ahmed
Oi Uzair. Qual arquivo xml? Estou usando um projeto do Android Studio 3.6.3 criado a partir de um modelo de atividade vazia. Obrigado.
— Amor e paz - Joe Codeswell
— wklbeta
Configuração android:gravity="center" funcionou para mim
Nada de estilo. A barra de ferramentas é basicamente ViewGrouptudo que você precisa fazer é definir a gravidade dos elementos nela.
Não funciona comandroidx.appcompat.widget.Toolbar
— tmm1 26/10/18
para fonte personalizada na barra de ferramentas, você pode substituir a fonte textView em grande estilo e, em seguida, todas as textView no aplicativo e a fonte do título da barra de ferramentas foram alteradas automaticamente. estúdio android 3.1.3
em grande estilo fazê-lo:
e, em seu tema, use o seguinte:
— Ali Khaki
Encontrei outra maneira de adicionar barra de ferramentas personalizada sem nenhum código Java / Kotlin adicional.
Primeiro: crie um XML com seu layout de barra de ferramentas personalizado com AppBarLayout como pai:
Segundo: inclua a barra de ferramentas no seu layout:
A meu ver, você tem duas opções:
1) Edite o XML da barra de ferramentas. Quando sua barra de ferramentas é adicionada ao XML, geralmente se parece com isso:
se você quiser personalizá-lo, remova o '/' no final e faça assim:
Dessa forma, você pode ter uma barra de ferramentas e personalizar a visualização de texto e o logotipo.
2) Altere programaticamente a visualização de texto e o ícone nativos:
verifique se a barra de ferramentas não é nula antes de definir algo nela.
— Idan Damri
Você pode personalizar TextViewna barra de ferramentas assim:
Então, isso centralizará o texto. Se você deseja adicionar uma fonte personalizada ao normal Toolbar, faça um <style>: