2014-12-23 2 views
6

восстановления скрытого мое приложение имеет ListView, и я хочу, чтобы скрыть ActionBar, когда я прокручиваю вниз и сделайте видимым ActionBar, когда я прокручиваю up.The проблема не потайное/Восстановление скрытого действия из-за этого, мерцание, которое происходит из-за этого.Удалить мерцает на ActionBar скрытие/

Я гугл много и шкаф, что на решение, которое я нашел это: StackOverflow Question

Согласно решению данному: я должен добавить paddingTop из ListView высоты, равной ActionBar о высоте, затем добавьте заголовок.

Итак, я установил прописку в верхней части списка с высотой "?android:attr/actionBarSize", но я застрял в том, что делать дальше. Каким будет содержимое файла header.xml.

Мой код: -

   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); 

Все это делая добавление постоянного дополнения поверх списка, так как добавление заголовка решает мою мерцающую проблему.

Или есть ли другой способ решить эту проблему?

Спасибо.

+0

почему бы вам не использовать 'android.support. v7.widget.Toolbar'? – pskink

+0

Извините, я не знал об этом. Как я могу мерцать, используя это? – Mohit

+0

нет мерцания с помощью панели инструментов – pskink

ответ

5

Я не знаю, зачем вам нужен заголовок, чтобы избавиться от мерцания. Идея заключается в том, что при добавлении

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

ListView рисуется под ActionBar, вот почему его расположение не меняется при ActionBar скрытия. Для того, чтобы предотвратить содержание от перекрытия на ActionBar когда открыт экран можно добавить clipToPadding атрибут:

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

Редакция: Я понимаю, что вам нужен заголовок для имитации верхнего отступа.

+0

Мерцание снимается.Но есть одна проблема: панель действий теперь невидима, поэтому, когда я прокручиваю нижнюю часть и пытаюсь прокрутить вверх, панель действий отображает и, поскольку она невидима, содержимое отображается внутри нее. – Mohit

+0

Вы можете сделать его непрозрачным с цветом фона, например. – Bracadabra

+0

Да, просто так, это работает, спасибо большое. Но, пожалуйста, вы можете объяснить, как cliptopadding и scrillbarstyle фиксировали мерцание? – Mohit

0

Извините за поздний ответ.

У меня была такая же проблема. Но я решил эту проблему следующим образом:

Вы должны объявленную панель инструментов ниже вашего RecyclerView или ListView и поставить эту строку в RecyclerView или ListView:

  "android:paddingTop="?attr/actionBarSize" 

      android:clipToPadding="false" 

     android:scrollbarStyle="outsideOverlay"" 
Смежные вопросы