Próbuję uzyskać wysokość ActionBar
(przy użyciu Sherlocka) za każdym razem, gdy tworzone jest działanie (szczególnie do obsługi zmian konfiguracji przy obrocie, w których wysokość ActionBar może się zmienić).
W tym celu używam metody, ActionBar.getHeight()
która działa tylko wtedy, gdy ActionBar
jest pokazany.
Kiedy pierwsza czynność jest tworzony po raz pierwszy, mogę zadzwonić getHeight()
w onCreateOptionsMenu
zwrotnego. Ale ta metoda nie jest wywoływana później.
Więc moje pytanie brzmi: kiedy mogę wywołać getHeight () i mieć pewność, że nie zwraca 0? Lub jeśli nie jest to możliwe, jak ustawić wysokość paska ActionBar?
W XML powinieneś użyć tego atrybutu:
źródło
android.support.v7.appcompat.R.attr.actionBarSize
. Jeśli chcesz użyć go w układzie XMLandroid:paddingTop="?attr/actionBarSize"
. Działa dobrze wszędzie.Ok, przeglądałem go i kilka razy trafiałem do tego postu, więc myślę, że dobrze byłoby opisać nie tylko Sherlocka, ale także appcompata:
Wysokość paska akcji za pomocą appCompat
Całkiem podobny do opisu @Anthony można go znaleźć za pomocą następującego kodu (właśnie zmieniłem identyfikator zasobu):
Problem z przed kanapką
Potrzebowałem wysokości paska akcji, ponieważ na urządzeniach z ICE_CREAM_SANDWITCH mój widok nakładał się na pasek akcji. Próbowałem ustawić android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize", ustawienie nakładania się na view / actionbar, a nawet stałą wysokość paska akcji z niestandardowym motywem, ale nic nie działało. Tak to wyglądało:
Niestety dowiedziałem się, że dzięki metodzie opisanej powyżej otrzymuję tylko połowę wysokości (zakładam, że pasek opcji nie jest zajęty), więc aby całkowicie naprawić problem, muszę podwoić wysokość paska akcji i wszystko wydaje się w porządku:
Jeśli ktoś zna lepsze rozwiązanie (niż podwojenie actionBarHeight), z przyjemnością dam mi znać, ponieważ pochodzę z rozwoju iOS i większość rzeczy związanych z widokiem na Androida jest dość myląca :)
Pozdrowienia,
hris.to
źródło
ActionBar.getHeight()
. W zależności od sytuacji może to również zadziałać.layout_gravity="center_vertical"
? Zmień to na"bottom"
. Android 2.3 obsługuje marginesy w FrameLaoyut inaczej niż nowsze Androidy.@Anthony odpowiedź działa na urządzeniach, które obsługują
ActionBar
i dla urządzeń, które obsługują tylkoSherlock Action Bar
następującą metodę, należy użyćźródło
com.actionbarsherlock.R.attr.actionBarSize
działał zarówno na Androida 2.3, jak i 4.0, więc wygląda na to, że możesz z niego korzystać niezależnie od wersji Androida.myślę, że najbezpieczniejszym sposobem byłoby:
źródło
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Aby ustawić wysokość
ActionBar
, możesz utworzyć nową,Theme
taką jak ta:i ustaw to
Theme
naActivity
:źródło
Jawa:
xml:
źródło
Jeśli używasz paska narzędzi jako paska działań,
następnie po prostu użyj layout_height paska narzędzi.
źródło
możesz użyć tej funkcji, aby uzyskać wysokość paska akcji.
źródło
Ta metoda pomocnicza powinna się komuś przydać. Przykład:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
źródło
musisz to tylko dodać.
źródło
Znalazłem bardziej ogólny sposób, aby to odkryć:
gdzie „ mainView ” to widok główny twojego układu.
Chodzi o to, aby uzyskać pozycję Y mainView, ponieważ jest ona ustawiona bezpośrednio pod paskiem czynności (lub paskiem narzędzi).
źródło
Wysokość paska akcji różni się w zależności od zastosowanego motywu. Jeśli używasz AppCompatActivity, wysokość będzie w większości przypadków różna od normalnej aktywności.
Jeśli używasz AppCompatActivity , powinieneś użyć R.attr.actionBarSize zamiast android.R.attr.actionBarSize
źródło
W xml możesz użyć? Attr / actionBarSize, ale jeśli potrzebujesz dostępu do tej wartości w Javie, musisz użyć poniższego kodu:
źródło
Gotowa metoda na spełnienie najpopularniejszej odpowiedzi:
źródło
Oto zaktualizowana wersja z Kotlin, z której korzystałem, zakładając, że telefon jest wyższy niż Honeycomb:
źródło
Jeśli używasz Xamarin / C #, to jest kod, którego szukasz:
źródło
źródło
Prostym sposobem na znalezienie wysokości paska akcji jest
onPrepareOptionMenu
metoda działania .źródło
W javafx (przy użyciu Gluon) wysokość jest ustawiana w czasie wykonywania lub coś podobnego. Chociaż jest w stanie uzyskać szerokość tak jak normalnie ...
double width = appBar.getWidth();
Musisz utworzyć detektor:
GluonApplication application = this;
... I weź najnowszą wartość, którą zmienił. Aby uzyskać wysokość.
źródło
Po wypróbowaniu wszystkiego, co istnieje, bez powodzenia, znalazłem przez przypadek funkcjonalny i bardzo łatwy sposób na uzyskanie domyślnej wysokości paska akcji.
Testowane tylko w API 25 i 24
DO#
Jawa
źródło