Estou tentando obter a altura do ActionBar
(usando Sherlock) toda vez que uma atividade é criada (especialmente para manipular alterações de configuração na rotação, onde a altura do ActionBar pode mudar).
Para isso, eu uso o método ActionBar.getHeight()
que funciona apenas quando o ActionBar
é mostrado.
Quando a primeira atividade é criada pela primeira vez, posso chamar getHeight()
o onCreateOptionsMenu
retorno de chamada. Mas esse método não é chamado depois.
Portanto, minha pergunta é quando posso chamar getHeight () e ter certeza de que ele não retorna 0? Ou, se não for possível, como posso definir a altura do ActionBar?
Em XML, você deve usar este atributo:
fonte
android.support.v7.appcompat.R.attr.actionBarSize
. Se você quiser usá-lo no layout xmlandroid:paddingTop="?attr/actionBarSize"
,. Funciona bem em qualquer lugar.Ok, eu estava pesquisando e acessando este post várias vezes, então acho que será bom ser descrito não apenas para Sherlock, mas também para o appcompat:
Altura da barra de ação usando appCompat
Bem parecido com a descrição do @Anthony, você pode encontrá-lo com o seguinte código (acabei de alterar a ID do recurso):
Problema Pré Sandwitch
Eu precisava da altura da barra de ação porque, nos dispositivos anteriores ao ICE_CREAM_SANDWITCH, minha visualização era sobreposta à barra de ação. Eu tentei configurar android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize", definindo sobreposição para exibir / barra de ação e até altura fixa da barra de ação com tema personalizado, mas nada funcionou. É assim que parecia:
Infelizmente, descobri que, com o método descrito acima, recebo apenas metade da altura (suponho que a barra de opções não esteja ocupada), para corrigir completamente o problema, preciso dobrar a altura da barra de ação e tudo parece correto:
Se alguém souber uma solução melhor (do que duplicar o actionBarHeight), ficarei feliz em me avisar quando for do desenvolvimento do iOS e achei a maioria das coisas do modo de exibição do Android bastante confusas :)
Saudações,
hris.to
fonte
ActionBar.getHeight()
. Dependendo da situação, isso pode funcionar para você também.layout_gravity="center_vertical"
? Mude para"bottom"
. O Android 2.3 lida com a margem no FrameLaoyut de maneira diferente dos andróides mais recentes.A resposta do @Anthony funciona para dispositivos que suportam
ActionBar
e para aqueles que suportam apenas oSherlock Action Bar
seguinte método, devem ser usadosfonte
com.actionbarsherlock.R.attr.actionBarSize
trabalhei no Android 2.3 e 4.0, então parece que você pode usá-lo independentemente da versão do Android.Eu acho que a maneira mais segura seria:
fonte
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Para definir a altura,
ActionBar
você pode criar novosTheme
como este:e defina isso
Theme
para o seuActivity
:fonte
Java:
xml:
fonte
Se você estiver usando uma barra de ferramentas como a ActionBar,
basta usar o layout_height da barra de ferramentas.
fonte
você pode usar esta função para obter a altura da barra de ação.
fonte
Esse método auxiliar deve ser útil para alguém. Exemplo:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
fonte
você só precisa adicionar isso.
fonte
Eu encontrei uma maneira mais genérica de descobri-lo:
onde ' mainView ' é a visualização raiz do seu layout.
A idéia é basicamente obter a posição Y do mainView, conforme definido logo abaixo da ActionBar (ou Barra de Ferramentas).
fonte
A altura da barra de ação varia de acordo com o tema aplicado. Se você estiver usando AppCompatActivity, a altura será diferente na maioria dos casos da atividade normal.
Se você estiver usando AppCompatActivity , use R.attr.actionBarSize em vez de android.R.attr.actionBarSize
fonte
No xml, você pode usar? Attr / actionBarSize, mas se precisar acessar esse valor em Java, precisará usar o código abaixo:
fonte
Um método pronto para atender a resposta mais popular:
fonte
Aqui está uma versão atualizada com o Kotlin que usei assumindo que o telefone é superior ao Honeycomb:
fonte
Se você estiver usando o Xamarin / C #, este é o código que você está procurando:
fonte
fonte
Uma maneira simples de encontrar a altura da barra de ação é usando o
onPrepareOptionMenu
método Activity .fonte
No javafx (usando Gluon), a altura é definida em tempo de execução ou algo parecido. Embora seja capaz de obter a largura como normalmente ...
double width = appBar.getWidth();
Você precisa criar um ouvinte:
GluonApplication application = this;
... E use o valor mais recente para o qual foi alterado. Para obter a altura.
fonte
Depois de tentar tudo o que está por aí sem sucesso, descobri, por acidente, uma maneira funcional e muito fácil de obter a altura padrão da barra de ação.
Testado apenas nas API 25 e 24
C #
Java
fonte