2011-10-21 11 views
9

Próbowałem rzeczy i szukałem przez ostatnie kilka godzin i nie miałem żadnego miejsca, więc pomyślałem, że o to tutaj poproszę.Paski przewijania w stylu tabletu Gmail z przezroczystym paskiem akcji

Zasadniczo wersja Gmaila o strukturze plastra miodu ma widok listy po prawej stronie listy wiadomości, a kiedy przewijasz listę, elementy przechodzą pod paskiem akcji, który wygląda jak gradient na niej z #00FFFFFF na dole, idąc w górę do #FFFFFFFF u góry, sprawiając wrażenie, że elementy gasną.

Ale ważne jest, aby zauważyć, jest to, że pasek przewijania w ListView nigdy nie idzie pod ActionBar! a domyślna górna pozycja listy jest pod paskiem przewijania.

Próbowałem zaimplementować podobny układ stylu dla mojej aplikacji z przewijaniem przewijającym się pod paskiem akcji, który ma ustawiony alfą, wygląda to ładnie i dobrze, ale paski przewijania również są pod spodem! :(a to sprawia, że ​​wygląda to trochę dziwne, że nie jest to miła opcja.

mam osiągnąć to, co mam do tej pory za pomocą

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

i

getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg)); 

który jest XML drawable, który po prostu ma kolor #BB000000 (bez gradientu)

to jest obecny efekt, pasek przewijania można zobaczyć pod paskiem akcji :(

Current effect

to pożądany efekt z pasek przewijania nie wchodząc w actionbar ale zawartość nie przewijać się pod nią

Desired effect

EDIT: Myślę, że to prawdopodobnie używa coś niestandardowego w Google i wszyscy jednak zrezygnował zastanawianie go

+0

Czy mogli ustawić pasek akcji na przezroczystym tle, a następnie użyć ListView.addHeaderView(), który dodał gradient do początku listy? –

+0

Pamiętam, że rozmawialiśmy o tym, w jaki sposób można użyć marginesu lub wypełnienia w jakiś sposób, ale nie pamiętam, gdzie go znalazłem. Każda pomoc w tej sprawie byłaby świetna. –

Odpowiedz

2

nazywają to przed super.onCreate(savedInstanceState); w onCreate swojej działalności

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Więcej: http://developer.android.com/reference/android/view/Window.html#FEATURE_ACTION_BAR_OVERLAY

+0

Tak jak w pytaniu, które już zrobiłem, powoduje to, że widok listy przechodzi pod paskiem, ale także pasek przewijania - nie chcę paska przewijania pod spodem, chcę tylko, żeby lista płynęła pod nim, gdy z góry – dten

+0

i jego najniższą wersją jest poziom interfejsu API 11 .. –

0

prostu użyć:

getActionBar().setBackgroundDrawable(null); 
+0

Czy próbowałeś nawet tego? :) Nie działa – dten

+0

Oczywiście, że tak, i używam w produkcie komercyjnym. Jeśli to nie działa, prawdopodobnie nie ustawiłeś poprawnie innych parametrów. Daj mi znać, jeśli nadal ma znaczenie. –

+0

Listview nie rozszerza się jednak pod paskiem akcji – dten

1

nie widzę łatwy sposób to zrobić, ale mają pochodzić z dwóch możliwych rozwiązań. Może być znacznie lepsza opcja, której oczywiście nie widzę.

Pierwszym i najłatwiejszym rozwiązaniem jest utworzenie pliku tła 9-pakowego dla ciebie ActionBar z rozszerzającym się obszarem gradientu i stałym nieprzezroczystym obszarem po prawej stronie, po tej samej stronie co pasek przewijania. W ten sposób pasek przewijania nadal byłby pod paskiem akcji, ale byłby ukryty. Miałoby to jednak wpływ na znikanie/zmniejszanie się paska przewijania.

Innym rozwiązaniem byłoby, aby edytować kciuk przewijania w xml jak poniżej:

<ListView android:scrollbarThumbVertical="@drawable/YOUR_CUSTOM_THUMB" ></ListView> 

Następnie utwórz kciuk przewijania z przezroczystą przesunięcie w górę.

Myśląc o tym Myślę, że druga opcja jest prawdopodobnie najlepsza i da najlepszy rezultat. Zdaję sobie sprawę, że to całkiem kiepskie narzędzie. Patrząc na sposób kodowania tego, myślę, że musiałbyś rozszerzyć liczbę klas i zastąpić ładunek metod.

Powiązane problemy