Ich habe ein paar Recherchen zu diesem Thema gemacht und ich konnte keine komplette Lösung finden, also Schritt für Schritt und mit ein wenig Versuch und Irrtum, finde ich schließlich heraus, wie wir diese Ergebnisse erreichen können : mit einem transparenten oder farbigen Actionbar
und Statusbar
. Siehe meine Antwort unten.Android transparente Statusleiste und Actionbar
Antwort
Ich entwickle eine App, die in allen Geräten mit> = API14 ähnlich aussehen muss, wenn es um Actionbar und Statusbar-Anpassung geht. Ich habe endlich eine Lösung gefunden und da es ein bisschen Zeit in Anspruch genommen hat, werde ich es teilen, um einige von euch zu retten. Wir beginnen mit der Verwendung einer appcompat-21-Abhängigkeit.
Transparent ActionBar:
Werte/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>
Werte-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>
Jetzt können Sie benutze die se Themen in Ihrem AndroidManifest.xml
festlegen, welche Aktivitäten einen transparenten oder farbigen ActionBar
:
<activity
android:name=".MyTransparentActionbarActivity"
android:theme="@style/AppTheme.ActionBar.Transparent"/>
<activity
android:name=".MyColoredActionbarActivity"
android:theme="@style/AppTheme.ActionBar"/>
Hinweis: in API> = 21 erhalten die Actionbar
transparent Sie müssen Holen Sie sich die Statusbar
auch transparent, sonst werden Ihre Farbstile nicht respektieren und hellgrau bleiben.
Transparent Statusbar (funktioniert nur mit API> = 19):
Dieses es ziemlich einfach ist einfach den folgenden Code verwenden:
protected void setStatusBarTranslucent(boolean makeTranslucent) {
if (makeTranslucent) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
Aber Sie werden eine Bekanntmachung funky ergebnis:
Dies passiert, weil wenn die Statusbar
ist transparent, das Layout verwendet seine Höhe.Um dies zu verhindern, dass wir gerade brauchen:
SOLUTION ONE:
Fügen Sie diese Zeile android:fitsSystemWindows="true"
in Ihrem Layout-Ansicht Container von was auch immer Sie brüllen die ActionBar platziert werden soll:
...
<LinearLayout
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
SOLUTION TWO:
ein paar Zeilen zu unserer bisherigen Methode hinzufügen:
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);
}
}
Wo R.id.bellow_actionbar
wird das Layout Container Ansicht id werden, was wollen wir unten die Actionbar
platziert werden:
...
<LinearLayout
android:id="@+id/bellow_actionbar"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
Das ist es also, denke, es ich etwas nicht zu vergessen. In diesem Beispiel habe ich kein Toolbar
verwendet, aber ich denke, es wird das gleiche Ergebnis haben. Dies ist, wie ich meine anpassen 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);
}
Hinweis: dies ein abstract class
ist die ActionBarActivity
erweitert Hoffe, es hilft!
Es unterstützt nach KITKAT. Fügen Sie einfach folgenden Code in die OnCreate-Methode Ihrer Aktivität ein. Keine Änderungen an der Manifest-Datei erforderlich.
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);
}
Dies macht die Navigationsleiste auch transparent – NOlivNeto
- 1. Android Vollständig transparente Statusleiste?
- 2. Exploring FitSystemWindows und transparente Statusleiste in Android
- 3. Coordinator Layout und transparente Statusleiste
- 4. Android, wie eine transparente Statusleiste richtig machen
- 5. Transparente Statusleiste deckt den Aktionsmodus auf Kitkat
- 6. Android transparente Overlay-Symbolleiste
- 7. Transluzente Statusleiste mit dynamischer ActionBar Farbe in Android
- 8. So erstellen Sie eine transparente Statusleiste
- 9. Android statusbar Overlay mit ActionBar
- 10. Android actionbar icon
- 11. ActionBar - PullToRefresh
- 12. Transparente Symbole in ActionBar, wenn deaktiviert: nur auf meinem Telefon?
- 13. Höhe des Bildschirms ohne Statusleiste, ActionBar und Registerkarten
- 14. Android: ActionBar
- 15. ActionBar und ActionBar.Tab und Navigationsleiste android
- 16. make Statusleiste Kitkat Durchlässiger android
- 17. Android NavigationDrawer Überlappung von Statusleiste
- 18. ActionBar vs Toolbar oder ActionBar und Toolbar
- 19. Navigationsleiste und Statusleiste nicht verstecken
- 20. Android ActionBar MenuItem LowerCase
- 21. Xamarin.Forms implementieren Android ActionBar
- 22. Android Actionbar SearchView
- 23. Android: ActionBar, TabListener und support.v4.Fragment
- 24. Android ActionBar API, getSupportActionBar() und setDisplayHomeAsUpEnable Bedeutung?
- 25. Android Navigationsleiste oben ActionBar
- 26. Ändern Android Actionbar Untertitelfarbe
- 27. Android ActionBar Farbe tut
- 28. Android ActionBar nicht
- 29. Android Statusleiste Icon Design
- 30. Swarm App Android - Actionbar
Sie sollten wirklich nutzen [android: fitsSystemWindows] (http://developer.android.com/reference/android/view/View.html#attr_android:fitsSystemWindows), wenn Sie Ihre Ansicht, um sicherzustellen, wollen nicht unter die transparente Statusleiste. – ianhanniballake
Das ist völlig richtig, ich habe meinen Code überprüft und ich benutze dies auch. Ich weiß nicht, dass ich es in diesem Beispiel verpasst habe. Ich werde es aktualisieren, danke! – GuilhE
Endlich! Vielen Dank!! Upvoted und Favorit! – DannyThunder