2013-01-04 2 views
5

Mam podzielony pasek akcji, gdzie górny pasek jest ciemny, a dolny pasek (podział) jest jasny.Jak sprawdzić, czy ikona akcji paska zadań systemu Android znajduje się na górnym pasku lub na dolnym pasku (podzielona)?

W związku z tym chciałbym pokazać ikony działania kontrastu: ikony światła w górnym ciemnym pasku i ciemne ikony na dolnym pasku światła.

Problem polega na tym, że należy pomalować czynności na górnym lub dolnym pasku. Jak mogę to wiedzieć?

Inną opcją jest sprawdzenie, czy pasek akcji jest aktualnie podzielony. Skąd mam to wiedzieć?

Dzięki.

+0

Występuje problem z dzieleniem przy użyciu pasków kontrastu z powodu ikony przepełnienia. Ikony akcji można zmienić, ale przepełnienie nie może zostać zmienione. Zobacz pytanie: http: // stackoverflow.com/questions/13934825/how-to-change-the-overflow-button-when-in-cab –

Odpowiedz

8

Proste. Używasz wartości logicznych. Domyślnie masz podzielony pasek akcji, jeśli szerokość ekranu jest mniejsza niż 400p. Tak więc w swoich wartości folderze można umieścić:

/values/bools.xml:

oraz w wartościach sw400dp umieścić następujące.

/values-sw400dp/bools.xml:

<resources> 
    <bool name="split_action_bar">false</bool> 
</resources> 

Teraz można ustawić ikonę na podstawie tej wartości:

boolean isActionBarSplitted = getResources().getBoolean(R.bool.split_action_bar); 
if(isActionBarSplitted){ 
     // set light icon 
} 
else{ 
    // set dark icon 
} 

Edit:

Właściwie zapomnij o tym, co napisałem, nie musisz tworzyć własnej wartości boolowskiej, aby to sprawdzić. Jest już zadeklarowany jeden (który jest używany przez ActionBar do określenia, czy jest to urządzenie telefonu, czy tablet). Jeśli kierujesz na Androida HC +, możesz uzyskać dostęp do domyślnej wartości akcji: android.R.bool.split_action_bar_is_narrow, jeśli używasz ActionBarSherlock: R.bool.abs_split_action_bar_is_narrow. Znaleziono here dla domyślnego ActionBar, here Twojego ABS.

+1

Dzięki. Skąd wiesz, że to 400dp? –

+0

I kopać przez Androida kod źródłowy – Ahmad

+0

Wow, świetnie. Czy możesz podzielić się nazwą klasy i metody? –

0

To zależy od biblioteki, z której korzystasz.

Dla nowego AppCompat: sprawdzić wartość R.bool.abc_split_action_bar_is_narrow:

boolean split = getResources().getBoolean(R.bool.abc_split_action_bar_is_narrow); 

Dla ActionBarShelock: zaimportować klasę ResourcesCompat z biblioteki i zadzwonić:

boolean split = ResourcesCompat.getResources_getBoolean(this, R.bool.abs__split_action_bar_is_narrow); 

Jeśli don” t użyj dowolnej biblioteki, a następnie skorzystaj z odpowiedzi Ahmada, ale jeśli nie korzystasz z biblioteki, używaj jej tylko . Dzieje się tak, ponieważ używają różnych wartości. Struktura systemu Android wydaje się dzielić pasek, jeśli szerokość jest niższa niż 400dp, ale dla appcompat i ABS to 480dp.