2014-12-23 15 views
6

Moja aplikacja ma ListView i chcę ukryć actionbar kiedy przewijać i pokazania actionbar kiedy przewijać up.The problemem nie jest ukrywanie/odkrywanie działań pasek, ale migotanie, które dzieje się z tego powodu.Usuń migotanie na actionbar ukrywanie/odkrywanie

google dużo i rzecz szafa do rozwiązania znalazłem to: StackOverflow Question

Zgodnie z rozwiązaniem danej: muszę dodać paddingTop z ListView wysokości równej actionbar na wysokość, następnie dodaj nagłówek.

Ustawiłem więc dopełnienie u góry listy z wysokości "?android:attr/actionBarSize", ale utknąłem w tym, co robić dalej. Jaka będzie zawartość pliku header.xml.

Mój kod: -

   MyAdapter ma = new MyAdapter(); 
      ListView lv  = (ListView)findViewById(R.id.listView); 
      lv.setAdapter(ma); 

      ma.notifyDataSetChanged(); 

      //setting onScrollListener on the listview 
      lv.setOnScrollListener(new OnScrollListener(){ 
       private int mLast; 
       @Override 
       public void onScrollStateChanged(AbsListView view, 
         int scrollState) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onScroll(AbsListView view, int firstVisibleItem, 
         int visibleItemCount, int totalItemCount) { 
        // TODO Auto-generated method stub 
        if(mLast<firstVisibleItem) 
        { 
         if(myactionbar.isShowing()) 
         { 
          myactionbar.hide(); 
         } 
        } 
        if(mLast>firstVisibleItem) 
        { 
         if(!myactionbar.isShowing()) 
         { 
          myactionbar.show(); 
         } 
        } 
        mLast=firstVisibleItem; 
       } 

      }); 

listview.xml: -

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="@null" 
    android:paddingTop="?android:attr/actionBarSize" 

    /> 

onCreate(): -

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Wszystko to jest robienie jest dodawanie stałego wypełnienia na szczycie listy, więc w jaki sposób dodanie nagłówka rozwiąże mój problem z migotaniem.

Czy jest jakiś inny sposób rozwiązania tego problemu?

Dzięki.

+0

dlaczego nie można użyć 'android.support. v7.widget.Toolbar'? – pskink

+0

Przepraszam, nie wiedziałem o tym. Jak mogę używać tego migotania? – Mohit

+0

nie miga za pomocą paska narzędzi – pskink

Odpowiedz

5

Nie wiem, dlaczego potrzebujesz nagłówka, aby pozbyć się migotania. Chodzi o to, że podczas dodawania

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

ListView jest zasysane pod ActionBar, to dlaczego jego układ nie zmienia się, gdy actionbar ukrywa. Aby zapobiec zawartość z nakładających się przez ActionBar gdy ekran jest otwarty można dodać atrybut clipToPadding:

<ListView 
    … 
    android:paddingTop="?android:attr/actionBarSize" 
    android:clipToPadding="false" 
    android:scrollbarStyle="outsideOverlay" /> 

edycja: ją dostać, trzeba nagłówek symulować górną wyściółkę.

+0

Migotanie zostało usunięte.Ale jest jeden problem, pasek akcji jest teraz niewidoczny, więc kiedy przewijam do dołu i próbuję przewijać w górę, pasek czynności odkrywa się, a ponieważ jest niewidoczny, zawartość jest wyświetlana w środku. – Mohit

+0

Można na przykład zrobić nieprzezroczysty z kolorem tła. – Bracadabra

+0

Tak, właśnie to robiłem, to działa, wielkie dzięki. Ale czy możesz wyjaśnić, w jaki sposób cliptopadding i scrillbarstyle naprawiały migotanie? – Mohit

0

Przepraszamy za spóźnioną odpowiedź.

Mam ten sam problem. Ale rozwiązał ten problem w ten sposób:

Powinieneś deklarowaną swój pasek poniżej swojego RecyclerView lub ListView i umieścić tę linię w RecyclerView lub ListView:

  "android:paddingTop="?attr/actionBarSize" 

      android:clipToPadding="false" 

     android:scrollbarStyle="outsideOverlay""