2014-06-05 5 views
7

Ich habe eine Listview in einer Aktivität mit einem ActionBar wie folgt aus:fitsSystemWindows und extra Polsterung auf kitkat

<LinearLayout 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    tools:context=".LauncherActivity" 

    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
     <ListView 
      android:id="@+id/lvcalendar" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:clipToPadding="false" 
      android:fitsSystemWindows="true" 


      android:dividerHeight="10dp" 
      android:paddingTop="10dp" 
      android:paddingBottom="10dp" 
      android:divider="#00ffffff" 

      android:scrollbarThumbVertical="@drawable/scrollbarstyle" 
      android:layout_gravity="top" 
      android:listSelector="@android:color/transparent" 
      /> 
</LinearLayout> 

Die Aktivität Thema haben:

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

Unter Kitkat-Geräten wird das Verhalten, was ich wollen: Die Artikel haben 10dp Polsterung an der Unterseite und an der Spitze. Auf kitkat-Geräten scheinen paddingTop und paddingBottom keinen Effekt zu haben, da das Element des ListView nicht die 10dp-Füllung oben und unten hat.

Ich denke, das Problem ist irgendwo in android:fitsSystemWindows als dieses Attribut scheint die notwendige Polsterung auf die Sicht wegen transluzenten Dekor setzen und machen die android:padding* Attribute ignoriert werden.

Meine Frage: Gibt es trotzdem, damit ich den android:fitsSystemWindows Satz true haben kann und noch zusätzliche Polsterung auf der Ansicht hinzufügen?

+0

überprüfen Sie bitte die Antwort als Akzeptiert! , Was ist los mit dir ? – Mojtabye

+0

Das Verhalten, das ich will, ist nicht das, was @Spirit gesagt hat. – Noeljunior

+0

Haben Sie schon eine Lösung gefunden? habe das gleiche Problem – Sheychan

Antwort

14

Sie dieses Attribut zu übergeordneter Ansicht hinzufügen soll:

<LinearLayout 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:android="http://schemas.android.com/apk/res/android" 
tools:context=".LauncherActivity" 
android:fitsSystemWindows="true" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
+3

Wenn Sie dies der übergeordneten Aktivität hinzufügen, füllt die Listenansicht die Navigationsleiste nicht aus. Ich möchte immer noch die Listview hinter der transluzenten Navigationsleiste haben, aber die ich möchte die zusätzliche Polsterung plus die fitsSystemWindows Polsterung haben. Es ist vielleicht nicht möglich, ich weiß es nicht. Wenn Sie mehr Informationen oder Screenshots benötigen, sagen Sie einfach. Danke – Noeljunior

1

Sie können Ihre eigene Klasse erstellen, die Listview und überschreiben fitSystemWindows() in dieser Klasse erweitert, um die Einsätze in der bestehenden Polsterung (die Standardimplementierung hinzufügen ersetzt jedes Auffüllen mit den Einfügungen). Dann müssen Sie das Attribut android:fitsSystemWindows im Layout-XML nicht angeben, da Ihre neue Implementierung immer aufgerufen wird.

+1

Es scheint, dass ich das brauche. Ich werde so schnell wie möglich versuchen und ich werde hier die Ergebnisse und die Lösung erzählen. Vielen Dank! – Noeljunior

0

Antwort ist nein. Wenn Sie android: fitSystemWindows als true festlegen, überschreibt es das Auffüllen dieser Ansicht.

Sie können das gewünschte Verhalten erreichen, indem Sie zwei verschachtelte Ansichten haben, wobei die übergeordnete Ansicht android: passtSystemWindows als wahr und andere die Auffüllung enthält.

-1

Wenn Sie:

fitsSystemWindows=true 

Um ein Layout, Polsterung wird Einfügungen zurückgesetzt werden. Sie können das FitsSystemWindowsFrameLayout verwenden, um dieses Standardverhalten zu beheben.

+0

Ein Link zu einer möglichen Lösung ist immer willkommen, aber bitte [fügen Sie Kontext um den Link hinzu] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really) -good-answers/8259 # 8259) damit Ihre Mitbenutzer eine Idee haben, was es ist und warum es da ist. Zitiere immer den relevantesten Teil eines wichtigen Links, falls die Zielseite nicht erreichbar ist oder permanent offline geschaltet wird.Berücksichtigen Sie, dass das * kaum mehr als ein Link zu einer externen Site * ein möglicher Grund dafür ist, [warum und wie werden einige Antworten gelöscht?] (Http://stackoverflow.com/help/deleted-answers). –