16

Dodałem do mojego projektu android-support-library-v7-appcompat, aby obsługiwać ActionBar z poziomu API 7 powyżej.ActionBar z biblioteką obsługi i nakładką Fragmenty zawartość

Działa jak urok na Androida 4.0+, a także na Android 2.3 z normalną aktywnością, która ma setContentView w onCreate, ale gdy aktywność jest ładowana Fragment w onCreate ActionBar nakłada się z zawartością mojego układu. We wszystkich innych scenariuszach ActionBar działa dobrze.

Oto kod:

class AssetsActivity extends ActionBarActivity{ 
    @Override 
    protected void onCreate(Bundle arg0) 
    { 
     super.onCreate(arg0); 

     OpenLocalFragment assets = OpenLocalFragment.newInstance(index); 
      assets.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction() 
        .add(android.R.id.content, assets).commit(); 
    } 
} 

Tematem tej aktywności jest ustawiony w manifeście do:

@ stylu/Theme.AppCompat

to wynik na systemie Android 2.3 (na wersji 4.0+ ActionBar dobrze się prezentuje) actionBar overlaping

Możesz zobaczyć, że pierwszy element lisview nakłada się na ActionBar (biała ikona i tytuł "Moja aktywność")

Możliwe, że znalazłem błąd w bibliotece pomocy technicznej, wydano go tylko na 2 dni ? Dziękuję wszystkim.

+0

Problem rozwiązany, zobacz moją odpowiedź poniżej. – Primoz990

Odpowiedz

18

Edit: To jest teraz oficjalnie ustalone i wydany w Wsparcia Biblioteka V19.

Jak JJD skomentował poniżej, można użyć normalnie android.R.id.content z AppCompat-v7 r.19.0.0 lub nowszej. Przycisk domowy również działa.

Innymi słowy: Poniższe obejście nie jest już potrzebne, jeśli używana jest wersja 19.0.0 lub nowsza.


Dostałem odpowiedź pod code.google.com. Zrobiłem podsumowanie od Fryderyka odpowiedź:

do wstępnego urządzeń ICS należy użyć:

R.id.action_bar_activity_content

zamiast

android.R .id.content

R.id.action_bar_activity_content to nowy identyfikator używany w układzie do wyświetlania treści aplikacji, wydaje się, że zastępuje on android.R.id.content, gdy używasz wsparcia v7 appcompat ActionBarActivity.

Można użyć tego kodu, aby odzyskać prawidłowy identyfikator treści działalność:

public static int getContentViewCompat() { 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? 
       android.R.id.content : R.id.action_bar_activity_content; 
} 

Dzięki frederic

+1

UWAGA: to jest teraz oficjalnie błąd w systemie Android. Naprawili go i zostanie on wydany w przyszłości. https://code.google.com/p/android/issues/detail?id=58108 – Primoz990

+2

Należy pamiętać, że użycie appcompat-v7 r.19.0.0 wprowadza [nowy błąd dotyczący urządzeń z systemem Android 2.3.x omówionych w numerze # 59077] (https://code.google.com/p/android/issues/detail?id=59077). – JJD

+1

Oprócz odpowiedzi Primoz990: możesz użyć 'android.R.id.content', jeśli używasz ** appcompat-v7 r.19.0.0 lub nowszego **. Chris Banes [poprawiony numer 59077] (https://code.google.com/p/android/issues/detail?id=59077#c8), więc przycisk strony głównej działa na systemie Android 2.3 i nowszym. Nie potrzebujesz już obejścia odwołującego się do 'R.id.action_bar_activity_content'. – JJD

0

Dodaj dodatkowy pusty nagłówek listy z rozmiarem paska akcji. Powinien być dobrym rozwiązaniem.

+0

W tym przypadku jest to proste obejście, ale używam tego principe w wielu działaniach o różnych układach. Opublikuję zmianę z moim bieżącym obejściem. Dzięki i tak może to być czyjeś rozwiązanie. – Primoz990

1

Inną alternatywą, jeśli nie chcesz zmodyfikować kod źródłowy Android wsparcia -biblioteka-V7-AppCompat jest dodanie pustego układu w pliku xml układu, takich jak:

<LinearLayout 
    android:id="@+id/content_view" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

i mak e rozmowa fragment dodać do tego układu, zamiast:

ft.add(R.id.content_view, mFragment, mTag); 
1

wydaje się trochę późno, aby przyczynić się, ale miałem ten sam problem i nie widziałem odpowiedź tutaj ....

Sprawdź swoje style. plik xml, nie może być atrybut xml za nałożenie actionbar ustawiony na true, czyli

prawdziwej

cały wpis wygląda tak

<item name ="actionBarTabTextStyle" > @style/TabTextStyle</item> 
    <item name = "windowActionBarOverlay">true</item> 

Jeśli tak jest, to wystarczy zmienić wartość "windowActionBarOverlay" false.

Powiązane problemy