2013-12-14 14 views
21

Als ich meine Notizanwendung für Android 4.0 - 4.3 veröffentlichte, verwendete ich eine benutzerdefinierte Aktionsleistenfarbe mit einem benutzerdefinierten Aktionsleistensymbol (anstelle der standardmäßigen hellen und dunklen Aktionsleisten). Ich möchte es auf Android 4.4 so machen, dass die Statusleiste auch die benutzerdefinierte Farbe annimmt, die ich in meiner Aktionsleiste verwende (was # FFD060 ist). Gibt es eine Möglichkeit, meine aktuelle styles.xml einfach zu ändern, damit 4.4 dies nutzen kann?Ausnutzen der transparenten Statusleiste in Android 4.4 KitKat

Meine styles.xml unter meinen Werten-v19-Ordner sind wie folgt:

<resources> 

<style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBarTheme</item> 
</style> 

<style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar"> 
    <item name="android:background">#ffd060</item> 
    <item name="android:textColor">#fff</item> 
    <item name="android:icon">@drawable/action</item> 
    <item name="android:titleTextStyle">@style/MyTextAppearance</item> 
</style> 

<style name="MyTextAppearance" parent="android:TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:icon">@drawable/action</item> 
    <item name="android:textColor">#ffffff</item> 
</style> 
</resources> 

Ich habe umzusetzen versucht:

<item name="android:windowTranslucentStatus">true</item> 

Es bewirkt, dass die Inhalte meines Anwendungsstart nach oben, in der Statusleiste und wird von der Aktionsleiste abgedeckt.

Without the translucent code

Antwort

16

Update: Fand dieses großen Artikel aus Matt Gaunt (Google-Mitarbeiter) beim Hinzufügen eines Translucent-Themes zu Android-Apps. Es ist sehr gründlich und adressiert einige der Probleme, die viele Leute beim Implementieren dieses Stils zu haben scheinen: Translucent Theme in Android

Fügen Sie einfach Folgendes zu Ihrem benutzerdefinierten Stil hinzu. Dies verhindert das Verschieben des Inhalts hinter der ActionBar und bis zum oberen Rand des Fensters, nicht sicher über den unteren Bildschirmrand.

<item name="android:fitsSystemWindows">true</item> 

Credit: Transparent Status Bar System UI on Kit-Kat

+0

Auch dieser nette Internet-Bürger von Reddit hat eine großartige Erklärung, wie man die Farbe in die Statusleiste bringt. Grundsätzlich wickeln Sie Ihr Basislayout in einem FrameLayout mit der gewünschten Hintergrundfarbe ein. http://www.reddit.com/r/Android/comments/1ssgkt/any_android_apps_making_using_of_translucent/ce0y15d – thunsaker

+9

Dies ist ein wenig gefährlich, wenn Sie Toast in Ihrer App verwenden, siehe https://code.google.com/p/ android/issues/detail? id = 63653 – Paito

+0

Vielen Dank! GREAT article –

2

Es ist wie sieht alles was Sie tun müssen, ist dieses Element hinzufügen zu den Themen, die Sie eine durchscheinende Statusleiste wollen:

<item name="android:windowTranslucentStatus">true</item> 
+0

Ich habe dies zuvor in meiner Styles.xml versucht, und ich habe mich gefragt, ob es etwas mehr dazu gibt. Wenn ich das einfach hinzufüge, wird der Inhalt meiner Anwendungen nach oben verschoben und beginnt in der Statusleiste und wird durch die Aktionsleiste ausgeblendet. Hier ist ein Beispielbild, sobald ich es implementiere: [Ohne den transluzenten Code] (http://i.imgur.com/3jvQQL4.png). [Mit dem transluzenten Code] (http://i.imgur.com/XMgiO8h.png). – Amonstan

0

Sie sind ganz in der Nähe Sie müssen nur Ihre Sicht Hintergrundfarben aktualisieren:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffd060" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/background_light" 

     <!-- your stuff here --> 
    </LinearLayout> 
</FrameLayout> 

Festlegen eines globalen Hintergrundfarbe in Ihrem AppBaseTheme würde auch Arbeit aber würde wahrscheinlich ein Durcheinander verursachen, da es am Ende die Standardhintergrundfarbe für alles sein würde.

+2

Aber führt dies nicht zu einem zusätzlichen Overdraw? –

2

Fügen Sie diese Zeilen in Ihrem Hauptthema

<style name="AppTheme" parent="android:Theme.Holo.Light"> 
    <item name="android:windowTranslucentStatus">true</item> 
    <item name="android:windowTranslucentNavigation">true</item> 
    <item name="android:fitsSystemWindows">true</item> 
</style> 
0

die Farbe der Statusleiste zu ändern, um die durchscheinende Wirkung auf den Status und die Navigationsleiste

<item name="android:windowTranslucentStatus">true</item> 

<item name="android:windowTranslucentNavigation">true</item> 
windowBackground

<item name="android:windowBackground">@color/window_bg</item> 

hinzufügen