2013-08-02 5 views
8

Ich bin daran interessiert, einen Bildschirm aus einem transparenten Header und einem Listenansicht, die hinter dem Header scrollt erstellt. Ich arbeite mit einem Fehler; Die SCHNELLE Bildlaufleiste zeichnet auch unter der Kopfzeile.Erzwingen von Android Fast Scroll Bar auf ListViews in Padding zeichnen

Aus irgendeinem Grund scheint die Fastscrollbar den ScrollbarStyle, der auf die Listenansicht angewendet wird, nicht zu respektieren. Sie werden in der Abbildung sehen, dass die normale Bildlaufleiste funktioniert, aber die PowerScroll-Leiste befindet sich hinter der transparenten Kopfzeile.

FastScrollBar and NormalScrollBar example

Leider sind die Ansichten verwendet verwende ich haben oft Hunderte von Artikeln, so dass die fastscrollbar ist eine Notwendigkeit. Gibt es eine Möglichkeit, den "fastscrollStyle" festzulegen, der nicht dokumentiert ist? Ich bin offen für irgendwelche Vorschläge! Vielen Dank.

Hier ist das Layout XML als Referenz:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <ListView 
     android:id="@+id/myListView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clipToPadding="false" 
     android:fastScrollEnabled="true" 
     android:scrollbars="vertical" 
     android:scrollbarStyle="insideOverlay" 
     android:paddingTop="50dp"/> 

    <TextView android:text="My Header" 
       android:gravity="center" 
       android:background="#8fff0000" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp"/> 
</RelativeLayout> 

Diese für Listview in KitKat wurde behoben, jedoch scheint Grid dieses Problem weiterhin zu zeigen. Google?

+0

Verwenden Sie linearlayout anstelle von relationallayout. Der Header oben und legen Sie die Listview-Position unter der Überschrift fest. Listenelemente werden auch nie hinter dem Header- und Scrollbar-Symbol angezeigt. – Tugrul

+0

Ich möchte, dass die Listenansichtselemente hinter die Kopfzeile gezeichnet werden, während die schnelle Bildlaufleiste das vertikale Auffüllen der Listenansicht respektiert. Linearlayout hat kein schnelles Scrollen und hat eine sehr schlechte Leistung, wenn Sie ihm tausende Elemente hinzugefügt haben. :-) – supereee

+0

Danke für diese Rückmeldung. ;) – Tugrul

Antwort

1

Die beste Lösung besteht darin, Ihren Listenansicht von den anderen Layouts zu trennen, wobei die Hauptansicht relatives Elternelement ist und andere Layouts die untergeordneten Elemente sind.

EX.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <RelativeLayout 
       android:id"@+id/layoutHeader" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp" 
       android:layout_alignParentTop="true"> 

       <TextView android:text="My Header" 
         android:gravity="center" 
         android:background="#8fff0000" 
         android:layout_width="fill_parent" 
         android:layout_height="50dp"/> 
    </RelativeLayout> 

    <RelativeLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="+id/layoutHeader"> 
    <ListView 
     android:id="@+id/myListView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clipToPadding="false" 
     android:fastScrollEnabled="true" 
     android:scrollbars="vertical" 
     android:scrollbarStyle="insideOverlay" 
     android:paddingTop="50dp"/> 
    </RelativeLayout> 
</RelativeLayout> 
+0

Zeichnet das nicht einfach den Listen-View vor dem Header, während man eine unnötig große View-Hierarchie erstellt? – supereee

0

Dieser Fehler scheint in 4.4 behoben zu sein. In älteren Versionen scheint jedoch keine andere Problemumgehung bekannt zu sein als Padding bei 0 zu lassen.