2012-04-11 17 views
9

Mam MapView z paskiem akcji obsługiwanym przez ActionBarSherlock. Pasek akcji jest podzielony (na "wąskich" ekranach) i nakładany/półprzezroczysty (Android: windowActionBarOverlay jest prawdziwy). Mniej więcej tak jak aplikacja Mapy Google.Ustal, czy pasek akcji jest podzielony

Teraz chciałbym popchnąć widoki na górę mapy, u dołu ekranu nadal utrzymując ją powyżej dolnego paska akcji. Mój problem polega na tym, że nie znam wysokości dolnego paska akcji. Szczerze mówiąc, nie mogę nawet znaleźć sposobu, aby się dowiedzieć, czy jest narysowany, czy nie. getHeight() wydaje się zwracać wysokość górnego paska akcji (lub może to wysokość obu z nich, ale nadal nie wiem, czy dolny pasek akcji istnieje, czy nie.)

Proszę, powiedz mi, że ta informacja jest właściwa na moich oczach!

Odpowiedz

2

dolny pasek powinien dopasować wysokość regularnej pasku akcji. Zatem stosując ?android:attr/actionBarSize (lub w przypadku ActionBarSherlock za ?attr/actionBarSize) do wysokości w formacie XML lub getResources().getDimensionPixelSize(R.attr.actionBarSize) w kodzie powinno wystarczyć.

edycja:

Er, po drugim przeczytaniu twojego pytania wydaje się, że bardziej skupia się na określeniu, czy istnieje podział paska akcji.

Możesz czytać te odpowiedzi i dalszych uwag przez Adam Powell, akcja bar guru:

+0

Tak, również muszę wiedzieć, czy w ogóle istnieje. W każdym razie, powiedziano mi (według mnie, Romana), że w Android Office Hours było to po prostu niemożliwe. Przynajmniej nie w prosty i bezpośredni sposób. Dlatego teraz eksperymentujemy z jednym górnym paskiem akcji i naśladujemy dolny pasek akcji zamiast zwykłego widoku. Rozwiązuje to nie tylko tę kwestię, ale także tę, w której chcieliśmy "zmusić" niektóre działania do paska najlepszych działań. – pakerfeldt

3

wpadłem na ten sam problem. Na urządzeniach telefonicznych w trybie portretowym pasek akcji jest podzielony. Więc pozycje menu znajdują się na górnym pasku akcji, a karty na drugim pasku akcji (tabbar) poniżej. Po prostu nie znalazłem żadnego możliwego sposobu określenia wysokości paska akcji: aby zobaczyć, co pozostało na ekranie przed zbudowaniem mojego ekranu.

Więc zrobiłem założenie:

  • małych i normalnych urządzeń Rozmiar ekranu actionbar jest podzielona w trybie portretowym
  • dużych urządzeń Rozmiar ekranu (jak Nexus 7) actionbar jest również podzielić w trybie portretowym
  • na Xlarge urządzeń Rozmiar ekranu (tabletki) jak actionbar nie jest dzielony w trybie portretowym

Więc rozróżnienie różnych ekranów o utworzonych zasobów i bool

<!-- res/values/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">false</bool> 
</resources> 

<!-- res/values-small-port/booleans.xml 
    res/values-normal-port/booleans.xml 
    res/values-large-port/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">true</bool> 
</resources> 

W kodzie mam dostępu wartość tak:

Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar); 

Aby uzyskać wysokość actionbar w onCreateView() metoda:

TypedValue typedVal = new TypedValue(); 
getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS 
int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId); 

i dwukrotnie wysokość jeśli actionbar jest podzielony:

if(isSplit) 
    actionBarHeight = actionBarHeight * 2; 

To nie jest idealne rozwiązanie, ale dla mnie to działa.

+0

Najbliższa odpowiedź na rozwiązanie. –

+2

Wydaje mi się, że to założenie opiera się na fałszywym założeniu: mój pasek akcji dzieli się na Nexus 4, ale nie na Nexusie 7. –

+0

Nie jest też dzielony na emulator Nexusa 7 API 25 Android Studio. – isabsent

5

Jeśli używasz ActionBarSherlock można spojrzeć na wartość logiczną abs__split_action_bar_is_narrow

Wystarczy utworzyć jakąś statyczną metodę gdzie można zrobić

return ResourcesCompat.getResources_getBoolean(context, 
          R.bool.abs__split_action_bar_is_narrow); 

trzeba użyć ResourcesCompat (od ActionBarSherlock) klasę ponieważ pre 3.2 Nie mogę czytać folderów z danymi (np. Wartości-sw480).

+0

Czy to nadal będzie działać w API 3.1 +? to znaczy, czy ActionBarSherlock rzeczywiście używa natywnego paska akcji? –

+0

@CarlosP Tak, działało na Galaxy Nexus 4.2.2 –

+0

Dzięki za zgłoszenie, doceń to - mam nadzieję, że pomoże innym użytkownikom. –

Powiązane problemy