Slajd w stylu Android na Facebooku

283

Nowa aplikacja na Facebooku i jej nawigacja są takie fajne. Właśnie próbowałem zobaczyć, jak można go emulować w mojej aplikacji.

Czy ktoś ma pojęcie, jak to osiągnąć?

wprowadź opis zdjęcia tutaj

Po kliknięciu lewego górnego przycisku wyświetlany jest slajd strony i wyświetlany jest następujący ekran:

wprowadź opis zdjęcia tutaj

Wideo na YouTube

Harsha MV
źródło
2
tak, film będzie również pomocny, aby poznać dokładny efekt.
bool.dev,
@ bool.dev tutaj jest wideo: youtube.com/watch?v=ANLMaL7zn20
Harsha MV
@HarshaMV: - Spróbuj poszukać tego wątku. Myślę, że może ci trochę pomóc. stackoverflow.com/questions/8453320/…
Shashank_Itmaster
3
Bardzo dobry artykuł na temat wysuwanej nawigacji w Androidzie - androiduipatterns.com/2012/06/… . Musisz przeczytać.
AlexKorovyansky
Wdrożyłem własne przesuwane menu, patrz tutaj stackoverflow.com/a/15880375/1939564
Muhammad Babar

Odpowiedzi:

176

Sam się z tym bawiłem i najlepszym sposobem, jaki mogłem znaleźć, było użycie FrameLayout i umieszczenie niestandardowego HorizontalScrollView (HSV) na górze menu. Wewnątrz HSV znajdują się widoki aplikacji, ale pierwszy widok jest przezroczysty. Oznacza to, że gdy HSV ma zerowe przesunięcie przewijania, menu wyświetli się (i zaskakująco będzie można je kliknąć).

Gdy aplikacja się uruchamia, przewijamy HSV do przesunięcia pierwszego widocznego widoku aplikacji, a gdy chcemy pokazać menu, przewijamy do tyłu, aby wyświetlić menu poprzez przezroczysty widok.

Kod jest tutaj, a dwa dolne przyciski (o nazwie HorzScrollWithListMenu i HorzScrollWithImageMenu) w działaniu Uruchom pokazują najlepsze menu, jakie mogłem wymyślić:

Wersja demonstracyjna przesuwanego menu Androida

Zrzut ekranu z emulatora (mid-scroll):

Zrzut ekranu z emulatora (mid-scroll)

Zrzut ekranu z urządzenia (pełne przewijanie). Uwaga: moja ikona nie jest tak szeroka jak ikona menu Facebooka, więc widok menu i widok „aplikacji” nie są wyrównane.

Zrzut ekranu z urządzenia (pełne przewijanie)

Paul Grime
źródło
1
@AmokraneChentir Możesz korzystać z różnych działań, wywołując działania getDrawingCache()inne niż menu i tworząc ImageView z mapy bitowej. Następnie wywołaj startActivity(intent)& overridePendingTransition(0, 0)przy onClickmetodzie ClickListenerForScrollingklasy, aby natychmiast pokazać nową aktywność i uzyskać pożądany efekt.
Siklab.ph
1
Zastanawiam się, czy niestandardowy HorizontalScrollView może używać z ListView, ponieważ oficjalny dokument HorizontalScrollView wspominał, że zmusi ListView do wyświetlania całych elementów.
shiami
1
ten widelec przełącza działania bez użycia fragmentów!
Erik B,
1
Dzięki za pomoc mogłem korzystać z HorzScrollWithListMenu.java.
KarenAnne,
2
Dziękuję bardzo @PaulGrime ... to świetny prosty przykład, a najbardziej niesamowite jest to, że w tym demo jest łatwe do zrozumienia i dostosowania i nie ma projektu biblioteki do użycia.
Naveen Kumar
37

W tym projekcie bibliotecznym wdrożyłem nawigację typu wysuwanego na Facebooku .

Możesz łatwo wbudować go w aplikację, interfejs użytkownika i nawigację. Będziesz musiał wdrożyć tylko jedno Działanie i jeden Fragment, poinformuj bibliotekę o tym - a biblioteka zapewni wszystkie potrzebne animacje i nawigację.

W repozytorium można znaleźć projekt demo z użyciem biblioteki lib do implementacji nawigacji podobnej do Facebooka. Oto krótkie wideo z zapisem projektu demo .

Również ta biblioteka powinna być zgodna z tym wzorem ActionBar, ponieważ jest oparta na transakcjach działań i tłumaczeniach (nie transakcjach fragmentów i niestandardowych widokach).

W tej chwili najbardziej problem polega na tym, aby działał dobrze w aplikacjach, które obsługują zarówno tryb pionowy, jak i poziomy. Jeśli masz jakieś uwagi, prześlij je za pośrednictwem github.

Wszystkiego najlepszego,
Alex

AlexKorovyansky
źródło
4
Cześć, właśnie zorientowałem się, że twoje podejście będzie polegało na tworzeniu dużej mapy bitowej za każdym razem, gdy otworzysz pasek boczny. Zwiększy rozmiar sterty i może spowodować błąd pamięci.
shiami
3
Dzięki drogi korovyansk, jest bardzo miły. ale układ Absolute jest przestarzały w nowych systemach operacyjnych. Czy możesz go ponownie zakodować?
Hesam
Dziękujemy wszystkim, którzy wyrażają opinie na github lub tutaj. Wiem o niektórych błędach i mam pomysły, jak ulepszyć aplikację. Robię to, kiedy będę miał wolny czas.
AlexKorovyansky
Cześć Koroyansk. Korzystam z twojej biblioteki, działa dobrze. Ale mam mały problem. Po otwarciu listy pasków slajdów Rozpoczynam działanie po kliknięciu elementu widoku listy. Aktywność zaczyna się poprawnie, ale animacja wsuwania nie działa. Kod((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
Słoneczny
w twoim przypadku nowa aktywność otworzy się natychmiast bez oczekiwania na zakończenie animacji, możesz spróbować rozszerzyć bibliotekę i dodać wywołanie zwrotne dla końca animacji. być może dodam tę funkcję do następnej wersji biblioteki.
AlexKorovyansky,
24

Oto kolejna lib i moim zdaniem wydaje się najlepsza. Nie napisałem tego ...

AKTUALIZACJA:

Wydaje mi się, że ten kod działa najlepiej i przesuwa cały pasek działań podobnie do aplikacji G +.

Jak Google to zrobił? Przesuń ActionBar w aplikacji na Androida

Patrick
źródło
7
Napisałem tę bibliotekę, cieszę się, że ci się podoba. Na razie jest to naprawdę podstawowe, ale będę go poprawiać w ciągu najbliższych tygodni. Więcej niż mile widziane dla innych osób, aby wprowadzić w nim również zmiany.
David Scott
Ta biblioteka jest absolutnie cudowna. Jest tak prosty w użyciu i działa idealnie. Dziękuję Ci. Chciałbym tylko dodać, że próbka działa tylko z ICS (i myślę, że o strukturze plastra miodu) ... ale biblioteka działa aż do 2.1, nie używam jej bez problemu.
Steven Elliott
Nieźle, jest dość prosty, ale działa dobrze, a konfiguracja jest bardzo szybka. Jednak nie jest bardzo konfigurowalny spoza biblioteki: wszystkie elementy mają ten sam prosty układ, a w ruchu nie ma możliwości dynamicznego wyświetlania; obie rzeczy byłyby łatwe do dostosowania, ale naprawdę potrzebuję grupowania na liście i to nie będzie takie łatwe.
htafoya
22

Myślę, że aplikacja Facebook nie jest napisana w natywnym kodzie (mam na myśli kod natywny, używając układów w Androidzie), ale wykorzystali do tego webview i użyli bibliotek javascript ui, takich jak sencha . Można to łatwo osiągnąć za pomocą frameworka Sencha.

wprowadź opis zdjęcia tutaj

Sanjay Kumar
źródło
16
+1 Interfejs użytkownika można zmienić bez aktualizacji aplikacji, więc jest to zdecydowanie aplikacja internetowa, a aplikacja na Androida to w zasadzie przeglądarka internetowa.
Rudy,
7
Nie jestem pewien, czy tak jest koniecznie. Szkielet interfejsu użytkownika może być natywny (np. Rzeczywisty widok menu i inne natywne widoki), a zawartość tych widoków ładowana dynamicznie. Jeśli zmieni się szkielet aplikacji, prawdopodobnie wymagana będzie aktualizacja.
Paul Grime
2
Nie sądzę, że aplikacja Facebook jest aplikacją internetową. Zbyt płynny, szybki. Wiem, że aplikacje internetowe / hybrydowe wyglądają dobrze „natywnie”, ale wciąż jest trochę opóźnienia w porównaniu do natywnych. Nie tylko szkielet - listy, mapa itp. Wygląda i jest rodzimy. Przynajmniej z obecnym stanem techniki.
Ixx,
Ok, ktoś mi powiedział, że ta aplikacja nie była taka przez około 2 miesiące - więc masz na myśli starą wersję, której nie znam. W każdym razie warto poinformować, że bieżąca aplikacja jest zdecydowanie natywna.
Ixx,
20

Oto kolejna (bardzo ładna) biblioteka open source!

Zaletą tego jest to, że można go łatwo zintegrować z ActionBarSherlock.

Oto link do projektu github

Oto link do pobrania Google Play

dwbrito
źródło
2
myślę, że to jest najlepsze
Harsha MV
17

Właśnie wdrożyłem podobny widok dla mojego własnego projektu. Możesz to sprawdzić tutaj

Oto ekran przykładowej aplikacji opartej na bibliotece, którą napisałem: ActionsContentView Przykład

Łatwo jest używać tego niestandardowego widoku jako elementu układu XML. Oto przykład:

    <shared.ui.actionscontentview.ActionsContentView
      android:id="@+id/content"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:actions_layout="@layout/actions"
      app:content_layout="@layout/content" />

Mam pytania dotyczące korzystania z biblioteki ActionsContentView. Mogę napisać mały artykuł na stronie Wiki projektów.

Niektóre zalety tej biblioteki:

  • możliwość przesuwania widoku dotykiem
  • łatwo dostosować rozmiar paska akcji w XML
  • obsługa wszystkich wersji Androida SDK od 2.0

Jest jedno ograniczenie:

  • wszystkie poziome przewijane widoki nie będą działać na granicach tego widoku

Z pozdrowieniami, Steven

niegrzeczny
źródło
jak ustawić interfejs użytkownika jest jak przesłać zdjęcie? Testuję, że interfejs użytkownika jest webView na ekranie. Mam nadzieję, że widok listy zostanie wyświetlony po uruchomieniu aplikacji. przez lib jest 2.0, ale twoje demo to 4.0, mam nadzieję, że możesz także użyć 2.0. to jest fajne
pengwang
@pengwang: Właśnie wcisnąłem trochę kodu do obsługi tej funkcji. Można to zrobić podczas działania Activity.onResume (), wywołując viewActionsContentView.showActions ();
niegrzeczny
Czy można wyłączyć zdarzenia dotykowe na ukrytej części? Na przykład, gdy prawa część jest aktywna, wszystkie widoki po prawej stronie są wyłączone.
Valeriy,
Istnieje możliwość zablokowania układu treści podczas pokazania działania pierwszego. Wysłałem Ci przykładowy projekt.
niegrzeczny
16

W wersji 13 pakietu pomocy Android (maj 2013 r.) Dostępny jest moduł DrawerLayout służący do tworzenia szuflady nawigacji, którą można wyciągnąć z krawędzi okna. A szuflada nawigacji jest teraz wzorem.

biblioteka obsługi v4

wzór szuflady nawigacji

Wubao Li
źródło
2
Tak, minimalny obsługiwany poziom API to 4.
Wubao Li
1
A biblioteka kompatybilności pozwala używać jej na starszych urządzeniach. Właśnie opracowałem jeden dla Piernika i później.
Tony Maro,
2
To musi być dalej na górze. Zbyt wiele obcych bibliotek stron trzecich w innych odpowiedziach.
Jason Axelson
15

Dokonano podsumowania istniejącej implementacji i przekształcił ją w projekt biblioteczny plus przykładową aplikację. Dodano także parsowanie XML, a także automatyczne wykrywanie potencjalnie obecnego paska akcji, więc działa on zarówno z natywnym, jak i pomocniczym paskiem akcji, takim jak ActionBarSherlock.

Ten również przesuwa pasek akcji!

Całość stanowi projekt biblioteki wraz z przykładową aplikacją i jest opisany w przesuwanym menu dla Androida, takim jak aplikacje Google i Facebook . Dzięki scirocco za wstępny pomysł i kod!

SlideMenu na Piernik SlideMenu w ICS z ActionBar

bk138
źródło
10

Jest to proste i eleganckie: https://github.com/akotoe/android-slide-out-menu.git

Migawka:

wprowadź opis zdjęcia tutaj

Edward
źródło
możesz mi pomóc?? Pytanie związane z suwakiem .. Oto link stackoverflow.com/questions/14500927/...
moDev
czy pozwala ci się przesuwać dotykając? (średnia machnięcie)
alicanbatur
@ Edward Pracuję z twoją próbką, myślę, że jest świetny i łatwy w użyciu, ale napotkałem problem podczas obracania ekranu (używam Androida: configChanges = "orientacja" w manifeście z Androidem 3.1, ponieważ nie chcesz, aby aktywność została wznowiona) ekran obraca się dobrze, ale ramka zachowuje swój rozmiar i nie wygląda dobrze, masz na to sposób? Próbowałem już wszystkiego, ale nie mogę tego naprawić. dzięki
zvzej
@ Edward tutaj jest moje pytanie przy użyciu próbki, proszę o pomoc lub udzielenie porady dzięki. stackoverflow.com/questions/16778911/…
zvzej
8

Nie mogę jeszcze skomentować odpowiedzi udzielonej przez @Paul Grime, w każdym razie przesłałem do jego projektu github poprawkę dotyczącą problemu migotania ...

Zamieszczę poprawkę tutaj, może ktoś jej potrzebuje. Musisz tylko dodać dwa wiersze kodu. Pierwszy poniżej wywołania anim.setAnimationListener:

anim.setFillAfter(true);

A drugi po wywołaniu app.layout ():

app.clearAnimation();

Mam nadzieję że to pomoże :)

Fatal1ty2787
źródło
6

Zaimplementowałem to za pomocą AbsoluteLayout i prostego kontrolera slajdów, który przesuwa widok do ujemnego przesunięcia, aby go ukryć.

Jeśli ktoś jest zainteresowany, mogę wyczyścić kod / układ i opublikować. Wiem, że AbsoluteLayout jest przestarzałe, ale było to bardzo proste wdrożenie. Widok z lewej / Widok z prawej, a kiedy „przesuwasz się”, po prostu przenieś widok z lewej strony z przesunięcia -X do szerokości urządzenia - cokolwiek chcesz pokazać w widoku z prawej

Bogaty
źródło
Będę wdzięczny, jeśli możesz to zrobić bez AbsoluteLayout! Dzięki!
Igor
4

Witaj, to najlepsza przykładowa aplikacja demonstracyjna, która udostępnia menu na Facebooku, jak menu slajdów. Sprawdź kod tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Mukesh Y
źródło
3

W ramach mojej wspólnej biblioteki Androida (ACL) zaimplementowałem własny pasek boczny. Główne zalety:

  1. Pasek boczny można ustawić w dowolnej pozycji: lewej, górnej, dolnej, prawej
  2. Zarówno widok główny, jak i widok przesuwany są klikalne
  3. Pasek boczny może być częściowo pokazany
  4. Umieszczalne atrybuty dla SideBar ułatwiają zmianę jego stylu
  5. Artefakt w repozytorium maven
  6. Część dużej biblioteki

Kod źródłowy: https://github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar

Zastosowanie: https://github.com/serso/android-common/blob/master/samples/res/layout/acl_view_layout.xml

se.solovyev
źródło
3

Ostatnio pracowałem nad wersją implementacji przesuwanego menu. Wykorzystuje popularną bibliotekę Androida J.Feinsteina SlidingMenu.

Sprawdź kod źródłowy na GitHub:

https://github.com/baruckis/Android-SlidingMenuImplementation

Pobierz aplikację bezpośrednio na urządzenie, aby spróbować:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

Kod powinien być zrozumiały z uwagi na komentarze. Mam nadzieję, że będzie to pomocne! ;)

Andrius Baruckis
źródło
3

Znalazłem najprostszy sposób na to i jego działanie. Użyj prostej szuflady nawigacji i wywołaj drawer.setdrawerListner () i użyj metody mainView.setX () w metodzie drawerSlide poniżej lub skopiuj mój kod.

plik XML

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >

<RelativeLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

  <ImageView
      android:layout_width="40dp"
      android:layout_height="40dp"
      android:id="@+id/menu"
      android:layout_alignParentTop="true"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="10dp"
      android:layout_marginLeft="10dp"
      android:src="@drawable/black_line"
      />
</RelativeLayout>


<RelativeLayout
    android:id="@+id/left_drawer"
    android:layout_width="200dp"
    android:background="#181D21"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    >
    </RelativeLayout>
 </android.support.v4.widget.DrawerLayout>

plik java

   public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    menu=(ImageView)findViewById(R.id.menu);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mainView=(RelativeLayout)findViewById(R.id.content_frame);

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            drawerLayout.openDrawer(Gravity.LEFT);
        }
    });

    drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            mainView.setX(slideOffset * 300);
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
 }
}

wprowadź opis zdjęcia tutaj

Dziękuję Ci

Dalvinder Singh
źródło
2

Zrobię tu odważne domysły ...

Zakładam, że mają układ, który reprezentuje niewidoczne menu. Po naciśnięciu przycisku menu animują układ / widok na górze, aby odsunąć się na bok i po prostu włączyć widoczność układu menu. Nie myślałem o tym, że powoduje to jakiekolwiek problemy z indeksem Z w widokach ani o tym, jak to kontrolują.

jlindenbaum
źródło
jeśli korzystałeś z aplikacji .. możesz zobaczyć, że układ przesuwa się w prawo, ustępując miejsca sekcji menu. Spróbuję zrobić film i załadować go.
Harsha MV
1
Używam wersji na iPhone'a, jeśli wersja na Androida jest taka sama, to wątpię, by różniła się znacznie od tego, co opisałem. Nie napisałem wielu animacji na Androida, więc nie mogłem powiedzieć, jak wygląda kod animacji, ale mówiąc krótko, zakładam, że tak właśnie opisałem.
jlindenbaum
dziękuję, youtube.com/watch?v=ANLMaL7zn20 czy to ten sam efekt na iPhonie.
Harsha MV
2

Oto przewodnik po projektowaniu i rozwoju znajdujący się w oficjalnej dokumentacji Androida, bez potrzeby dodawania nieoficjalnej biblioteki zewnętrznej. Zrobi to tylko biblioteka wsparcia Androida. Znajdź linki tutaj.

zaprojektuj i opracuj .

jai_b
źródło
1

Aplikacja Facebook na Androida jest prawdopodobnie zbudowana z Fragmentów . Menu to jeden fragment, a dogłębna aktywność (kanał informacyjny / wydarzenia / przyjaciele itp.) To drugi fragment. Zasadniczo układ „wzorcowy i szczegółowy” tabletu na telefonie.

Gunnar Karlsson
źródło
W takim przypadku musimy zrobić pasek akcji wewnątrz fragmentu, więc nie możemy użyć żadnych funkcji systemu Android do jego zbudowania, prawda? Właściwie nie mogę mieć pewności co do Facebooka, ale dla wielu programistów jest zbyt trudny sposób na utworzenie paska akcji bez pomocy frameworka, mam nadzieję, że ten czas już minął.
AlexKorovyansky,
1

Aby uzyskać informacje, ponieważ biblioteka kompatybilności zaczyna się od 1.6, a ta aplikacja Facebook działa również na urządzeniach z Androidem 1.5, nie można tego zrobić z Fragmentami.

Możesz to zrobić w następujący sposób: Utwórz działanie „podstawowe” BaseMenuActivity, w którym umieścisz całą logikę dla elementu onItemClickListener dla listy menu i zdefiniujesz 2 animacje („otwieranie” i „zamykanie”). Na końcu / na początku animacji pokazujesz / ukrywasz układ BaseMenuActivity (nazwijmy to menu_layout). Układ tego działania jest prosty, jest to tylko lista z elementami + przezroczysta część po prawej stronie listy. Ta część będzie klikalna, a jej szerokość będzie taka sama jak „przycisk przesuwania”. Dzięki temu będziesz mógł kliknąć ten układ, aby rozpocząć animację, aby przesuwać content_layout w lewo i zajmować cały ekran. Dla każdej opcji (tj. Pozycji z listy menu) tworzysz „ContentActivity”, który rozszerza BaseMenuActivity. Następnie, po kliknięciu elementu na liście, uruchamiasz swój ItemSelectedContentActivity z widocznym menu (które zamkniesz, gdy tylko rozpocznie się aktywność). Układy dla każdej ContentActivity są FrameLayout i obejmują znaki i. Wystarczy przesunąć content_layout i wyświetlić menu_layout, kiedy chcesz.

To sposób na zrobienie tego i mam nadzieję, że byłem wystarczająco jasny.

p4u144
źródło
1

Bawiłem się tym przez ostatnie kilka dni i wymyśliłem rozwiązanie, które w końcu jest dość proste i które działa przed Honeycomb. Moim rozwiązaniem było animowanie widoku, który chcę przesunąć ( FrameLayoutdla mnie) i nasłuchiwanie końca animacji (w tym momencie, aby przesunąć lewą / prawą pozycję widoku). Wkleiłem tutaj moje rozwiązanie: Jak animować tłumaczenie widoku

Adil Hussain
źródło
1

Po kilku godzinach poszukiwań odkryłem, że rozwiązanie Paula Grime'a jest prawdopodobnie najlepsze. Ale ma za dużo funkcjonalności. Dlatego może być trudno uczyć się dla początkujących. Chciałbym więc przedstawić moją implementację, która pochodzi z pomysłu Paula, ale jest prostsza i powinna być łatwa do odczytania.

implementacja bocznego paska menu przy użyciu kodu Java bez XML

Chao
źródło
1

Nigdzie w powyższych odpowiedziach nie widziałem niesamowitej aplikacji SimonVT / android-menudrawer. Oto link

https://github.com/SimonVT/android-menudrawer

Jest bardzo łatwy w użyciu i można go umieścić po lewej, prawej, górze lub na dole. Bardzo dobrze udokumentowany przykładowym kodem i licencją Apache 2.0.

lwegener
źródło
0

W czerwcu 2012 r. Google dodało „szablony” we wtyczce Eclipse ADT i istnieje szablon o nazwie „przepływ główny / szczegółowy”, który robi dokładnie to (na podstawie fragmetów)

rds
źródło
1
Przepływ główny / szczegółowy nie jest kwestionowanym menu paska bocznego. To tylko dwa fragmenty wyświetlane razem (tablet) lub osobno (telefon).
tomash
W czerwcu 2013 r. Dodano układ szuflady nawigacji, co jest bardziej potrzebne, ale pasek ActionBar nie będzie się przesuwał z szufladą, ponieważ potrzebny jest tutaj suwak w stylu Facebooka.
Khulja Sim Sim