Estou tentando usar o código a seguir para centralizar o texto no ActionBar
, mas ele se alinha à esquerda.
Como você faz com que apareça no centro?
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
android
android-actionbar
android-theme
Sourabh Saldi
fonte
fonte
Respostas:
Para ter um título centralizado no ABS (se você quiser ter isso no padrão
ActionBar
, basta remover o "suporte" nos nomes dos métodos), você pode apenas fazer isso:Em sua atividade, em seu
onCreate()
método:abs_layout
:Agora você deve ter um
Actionbar
com apenas um título. Se você quiser definir um plano de fundo personalizado, defina-o no Layout acima (mas não se esqueça de definirandroid:layout_height="match_parent"
).ou com:
fonte
android:layout_gravity="center"
ao LinearLayout.((TextView)actionBar.getCustomView().findViewById(R.id.textView1)).setText("new title");
, onde textView1 é o seuTextView
ID em seu CustomView.Não tive muito sucesso com as outras respostas ... abaixo está exatamente o que funcionou para mim no Android 4.4.3 usando o ActionBar na biblioteca de suporte v7. Configurei para mostrar o ícone da gaveta de navegação ("botão do menu de hambúrguer")
XML
Java
fonte
params
objeto ?? Não podemos especificar a gravidade no arquivo de layout externo que estamos atribuindo à ActionBar.Defina sua própria visualização personalizada com o texto do título e, em seguida, passe LayoutParams para setCustomView (), como diz Sergii.
EDITADO : Pelo menos para largura, você deve usar WRAP_CONTENT ou sua gaveta de navegação, ícone do aplicativo, etc. NÃO SERÁ MOSTRADO (exibição personalizada mostrada em cima de outras exibições na barra de ação). Isso ocorrerá especialmente quando nenhum botão de ação for mostrado.
EDITADO : Equivalente em layout xml:
Isso não requer que LayoutParams seja especificado.
fonte
Apenas um rápido acréscimo à resposta de Ahmad. Você não pode mais usar getSupportActionBar (). SetTitle ao usar uma visualização personalizada com TextView. Portanto, para definir o título quando você tiver várias atividades com esta ActionBar personalizada (usando este xml), em seu método onCreate () depois de atribuir uma visualização personalizada:
fonte
ESTÁ BEM. Depois de muita pesquisa, combinada com a resposta aceita acima, descobri uma solução que também funciona se você tiver outras coisas em sua barra de ação (botão voltar / home, botão de menu). Então, basicamente, coloquei os métodos de substituição em uma atividade básica (que todas as outras atividades estendem) e coloquei o código lá. Este código define o título de cada atividade conforme fornecido em AndroidManifest.xml e também faz outras coisas personalizadas (como definir um tom personalizado nos botões da barra de ação e uma fonte personalizada no título). Você só precisa deixar de fora a gravidade em action_bar.xml e usar preenchimento.
actionBar != null
check é usado, uma vez que nem todas as minhas atividades têm um.Testado em 4.4.2 e 5.0.1
E meu action_bar.xml é assim (se alguém estiver interessado):
EDITAR : Se você precisar mudar o título para outra coisa APÓS a atividade ser carregada (onCreateOptionsMenu já foi chamado), coloque outro TextView em seu action_bar.xml e use o seguinte código para "preencher" este novo TextView, definir o texto e mostrar isto:
EDITAR (25.08.2016) : Não funciona com a revisão appcompat 24.2.0 (agosto de 2016), se sua atividade tiver um "botão Voltar". Apresentei um relatório de bug ( problema 220899 ), mas não sei se é útil (duvido que será corrigido em breve). Enquanto isso, a solução é verificar se a classe do filho é igual a AppCompatImageButton.class e fazer o mesmo, apenas aumentar a largura em 30% (por exemplo, appCompatImageButton.getWidth () * 1,3 antes de subtrair este valor do preenchimento original):
Nesse meio tempo, acrescentei algumas verificações de preenchimento / margem:
fonte
sem customview é capaz de centralizar o título da barra de ação. está funcionando perfeitamente para gaveta de navegação também
Boa codificação. obrigado.
fonte
Depois de muita pesquisa: Isso realmente funciona:
Você deve definir o layout custom_actionbar.xml de acordo com seus requisitos, por exemplo:
fonte
Funciona muito bem.
Layout abaixo de custom_actionbar:
fonte
Você precisa definir
ActionBar.LayoutParams.WRAP_CONTENT
eActionBar.DISPLAY_HOME_AS_UP
fonte
A melhor e mais fácil maneira, especificamente para quem deseja apenas visualização de texto com centro de gravidade sem nenhum layout xml.
fonte
Código aqui trabalhando para mim.
fonte
Uma solução somente Kotlin que não requer alterações nos layouts XML:
fonte
Aqui está uma solução Kotlin + androidx completa, baseada na resposta de @Stanislas Heili. Espero que seja útil para outros. É para o caso quando você tem uma atividade que hospeda vários fragmentos, com apenas um fragmento ativo ao mesmo tempo.
Em sua atividade:
Em seus fragmentos:
fonte
Os outros tutoriais que vi substituem todo o layout da barra de ação, ocultando os MenuItems. Eu resolvi fazer apenas as seguintes etapas:
Crie um arquivo xml da seguinte forma:
E na aula faça:
fonte
Para usuários Kotlin:
Use o seguinte código em sua atividade:
E o layout XML / recurso:
fonte
Este código não irá ocultar o botão Voltar, ao mesmo tempo irá alinhar o título no centro.
chame este método em oncreate
fonte