Zrobiłem kilka badań na ten temat i nie mogłem znaleźć kompletnego rozwiązania, więc krok po kroku, z pewnymi próbami i błędami, w końcu dowiaduję się, jak możemy osiągnąć te wyniki : mając przezroczysty lub kolorowy Actionbar
i Statusbar
. Zobacz moją odpowiedź poniżej.Przejrzysty pasek stanu Androida i pasek akcji
Odpowiedz
Zajmuję się tworzeniem aplikacji, która musi wyglądać podobnie na wszystkich urządzeniach z> = API14, jeśli chodzi o dostosowywanie paska akcji i paska statusu. W końcu znalazłem rozwiązanie, a ponieważ zajęło mi to trochę czasu, podzielę się nim, by ocalić część twoich. Zaczynamy od użycia zależności appcompat-21.
Transparent Actionbar:
wartości/styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light">
...
</style>
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
<item name="android:windowContentOverlay">@null</item>
<item name="windowActionBarOverlay">true</item>
<item name="colorPrimary">@android:color/transparent</item>
</style>
<style name="AppTheme.ActionBar" parent="AppTheme">
<item name="windowActionBarOverlay">false</item>
<item name="colorPrimary">@color/default_yellow</item>
</style>
Wartości-V21/styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light">
...
</style>
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
<item name="colorPrimary">@android:color/transparent</item>
</style>
<style name="AppTheme.ActionBar" parent="AppTheme">
<item name="colorPrimaryDark">@color/bg_colorPrimaryDark</item>
<item name="colorPrimary">@color/default_yellow</item>
</style>
Teraz możesz Użyj se tematy w swojej AndroidManifest.xml
aby określić, które działania będą mieć przezroczyste lub barwione ActionBar
:
<activity
android:name=".MyTransparentActionbarActivity"
android:theme="@style/AppTheme.ActionBar.Transparent"/>
<activity
android:name=".MyColoredActionbarActivity"
android:theme="@style/AppTheme.ActionBar"/>
Uwaga: API> = 21, aby uzyskać Actionbar
przejrzysty trzeba również uzyskać przezroczystość, inaczej nie będzie szanować twoich stylów kolorów i pozostanie jasnoszara.
Przezroczysty pasek stanu (działa tylko z API> = 19):
Ten jeden to całkiem proste wystarczy użyć następującego kodu:
protected void setStatusBarTranslucent(boolean makeTranslucent) {
if (makeTranslucent) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
Ale zauważysz funky wynik:
Dzieje się tak, ponieważ gdy Statusbar
jest przezroczysty, a układ użyje swojej wysokości.
jedno rozwiązanie:: Do tego wystarczy, aby zapobiec
Dodaj tę linię android:fitsSystemWindows="true"
w widoku Układ pojemnika o cokolwiek chcesz być umieszczony poniżej tej Actionbar:
...
<LinearLayout
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
Rozwiązanie drugie:
dodać kilka linijek do naszej poprzedniej metody:
protected void setStatusBarTranslucent(boolean makeTranslucent) {
View v = findViewById(R.id.bellow_actionbar);
if (v != null) {
int paddingTop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? MyScreenUtils.getStatusBarHeight(this) : 0;
TypedValue tv = new TypedValue();
getTheme().resolveAttribute(android.support.v7.appcompat.R.attr.actionBarSize, tv, true);
paddingTop += TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
v.setPadding(0, makeTranslucent ? paddingTop : 0, 0, 0);
}
if (makeTranslucent) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
Gdzie R.id.bellow_actionbar
będzie pojemnik układ widok id cokolwiek chcemy być umieszczone poniżej tej Actionbar
:
...
<LinearLayout
android:id="@+id/bellow_actionbar"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
Więc to jest to, to myślę, że nie jestem zapominając coś. W tym przykładzie nie użyłem Toolbar
, ale myślę, że będzie to taki sam wynik. W ten sposób mogę dostosować mój Actionbar
:
@Override
protected void onCreate(Bundle savedInstanceState) {
View vg = getActionBarView();
getWindow().requestFeature(vg != null ? Window.FEATURE_ACTION_BAR : Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(getContentView());
if (vg != null) {
getSupportActionBar().setCustomView(vg, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayUseLogoEnabled(false);
}
setStatusBarTranslucent(true);
}
Uwaga: jest to abstract class
który rozciąga ActionBarActivity
Nadzieję, że to pomaga!
Obsługuje po KITKAT. Po prostu dodaj poniższy kod na stronie Utwórz metodę działania. Nie trzeba żadnych modyfikacji pliku manifestu.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
Dzięki temu pasek nawigacji jest również przezroczysty – NOlivNeto
- 1. Ukryj pasek akcji, pokazując podzielony pasek akcji
- 2. Gradient pasek stanu na Androida Lollipop
- 3. Jak obsługiwać pasek akcji i przycisk menu?
- 4. Wyświetlony pasek stanu Excela?
- 5. Spawacz ARC odcina pasek akcji
- 6. Pasek stanu Ukryj Cordova
- 7. Jak zainstalować "pasek akcji" Sherlocka?
- 8. Pasek akcji nie wyświetlający ikon widoku akcji
- 9. Android: pasek rozwijania akcji Sherlocka
- 10. Ciemny pasek akcji z motywem.AppCompat
- 11. Pasek ładowania na pasku stanu?
- 12. Dodaj informacje do matplotlib Pasek narzędzi nawigacyjnych/pasek stanu?
- 13. Fałszywy pasek stanu Kolor, gdy pasek nawigacji jest ukryty
- 14. Pasek stanu nie ma tego samego koloru co pasek nawigacyjny
- 15. Jak ukryć pasek akcji (Theme.Holo), czy wersja Androida poniżej 3.0
- 16. mój pasek stanu w emulatorze 4.2.2 Androida jest uszkodzony
- 17. Ukryty pasek tytułu Androida powraca
- 18. Pasek akcji Sherlocka z przesuwanym menu
- 19. Ustal, czy pasek akcji jest podzielony
- 20. Przejrzysty pasek narzędzi dla rozwijanego paska narzędzi zwijania
- 21. Pasek akcji Sherlocka zmienia kolor tekstu
- 22. (iOS8) ustaw pasek stanu na zawartość światła
- 23. Pasek stanu aktualizacji Snapchat Aktualizacja iOS7
- 24. Brakujący pasek stanu w programie Visual Studio?
- 25. Pasek stanu nie działa na Ionic aplikacji
- 26. Pasek narzędzi przewijany pod paskiem stanu
- 27. Jak ukryć pasek stanu w Androidzie 4
- 28. Pasek akcji nie wyświetlający elementów akcji (wszystko w przepełnieniu) Android
- 29. Android - pasek narzędzi i pasek stanu jako współdzielonych obiektów z treścią zmienia
- 30. jednocześnie ukryj pasek stanu i pasek nawigacyjny, podobnie jak w aplikacji Zdjęcia
Należy naprawdę użyć [android: fitsSystemWindows] (http://developer.android.com/reference/android/view/View.html#attr_android:fitsSystemWindows), jeśli chcesz, aby zapewnić widok nie jest pod przezroczysty pasek stanu. – ianhanniballake
To całkowicie poprawne. Sprawdzałem kod i używam go również. Nie wiem, że tęskniłem za tym przykładem. Zaktualizuję to, dzięki! – GuilhE
Wreszcie! Dzięki!! Rewizja i ulubione! – DannyThunder