2013-08-02 2 views
8

Jestem zainteresowany tworzeniem ekranu złożonego z przezroczystego nagłówka i listy, która przewija się za nagłówkiem. Mam to działa z jedną wadą; pasek przewijania FAST również rysuje się pod nagłówkiem.Wymuszanie paska szybkiego przewijania Androida na listach do rysowania w obszarze wypełnienia

Z jakiegoś powodu fastscrollbar nie wydaje się respektować scrollbarStyle zastosowanego do widoku listy. Zauważysz na poniższym obrazku, że normalny pasek przewijania działa dobrze, ale pasek powerscroll znajduje się za przezroczystym nagłówkiem.

FastScrollBar and NormalScrollBar example

Niestety listviews używam często mają setki przedmiotów, więc fastscrollbar jest koniecznością. Czy istnieje sposób, aby ustawić "fastscrollStyle", który nie jest udokumentowany? Jestem otwarty na wszelkie sugestie! Dziękuję Ci.

Oto XML układ dla odniesienia:

<?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> 

ta została ustalona w KitKat dla ListView, jednak wciąż pojawia GridView wykazują ten problem. Google?

+0

Użyj instrukcji linearlayout zamiast relativelayout. Nagłówek u góry i ustaw pozycję listview pod nagłówkiem. Listitems nigdy nie będzie widoczny za nagłówkiem i ikoną paska przewijania. – Tugrul

+0

Chcę, aby elementy listview rysowały za nagłówkiem, a jednocześnie mając szybki pasek przewijania szanują pionowe wypełnienie listy. Linearlayout nie ma szybkiego przewijania i będzie miał słabą wydajność, jeśli dodasz do niego tysiące elementów. :-) – supereee

+0

Thx za tę opinię. ;) – Tugrul

Odpowiedz

1

Najlepszym rozwiązaniem jest oddzielenie widoku list od innych układów, w których głównym widokiem względnym jest rodzicielski, a inne układy są dziećmi.

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

Czy to nie po prostu rysuje widok listy przed nagłówkiem, tworząc niepotrzebnie większą hierarchię widoku? – supereee

0

Ten błąd wydaje się być poprawiony w wersji 4.4. W starszych wersjach wydaje się jednak, że nie ma znanego sposobu obejścia innego niż pozostawienie wypełnienia o wartości 0.