2012-11-13 13 views
15

Mam wiele elementów w ListView, które przewijają ekran.Jak dodać pustą przestrzeń na końcu listy?

Chciałbym, żeby na końcu widoku było puste miejsce. Oznacza to, że użytkownik powinien móc przewijać ostatni element w taki sposób, aby ostatni element znajdował się w środku rzutni.

Mogę użyć OverScroller, ale myślę, że umożliwiłoby to tylko oglądanie efektu sprężystego, jak często widziany na iPhonie.

Czy coś mogłem przeoczyć?

przewijane-do-Botton ekran powinien wyglądać mniej więcej tak: Android mockup where there are a number of labels the last of which is near the middle of the screen

+0

cokolwiek mogę myśleć byłoby hack od ListView nie działa w ten sposób ... ale można dostosować wysokość ostatniego widzenia w wykazie getView jeżeli position == count - 1. – JustinMorris

Odpowiedz

15
  1. nadmuchać dowolny układ do wyboru (może to być XML i ImageView bez odkształcalne i zadanej wysokości i szerokość do wyboru)
  2. Zmierz wysokość ekranu i tworzyć nowe LayoutParams i ustawić wysokość nim do 1/2 wysokości ekranu
  3. ustawić nowy układ params na nadmuchanej widzenia
  4. Korzystanie ListView Obsługi addFooterView() metoda dodać, że widok z dołu listy (jest tam również addHeaderView()) Kod

do pomiaru wysokości ekranu

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
int screenHeight = display.getHeight(); 

kod ustawić połowę wysokości ekranu:

View layout = inflater.inflate(R.layout.mylistviewfooter, container, false); 
ViewGroup.LayoutParams lp = layout.getLayoutParams(); 
lp.height = screenHeight/2; 
layout.setLayoutParams(lp); 
myListView.addFooterView(layout); 

An Aside: Po dodaniu widoku stopki lub nagłówka do dowolnego widoku listy, należy to zrobić przed dodaniem adaptera. Ponadto, jeśli chcesz poznać swoją klasę adaptera po zrobieniu tego trzeba wiedzieć, nazywając adapter ListView poprzez getAdapter() powróci instancją HeaderViewListAdapter, w którym trzeba będzie zadzwonić do jego metoda getWrappedAdapter coś takiego:

MyAdapterClassInstance myAdapter = (MyAdapterClassInstance) ((HeaderViewListAdapter) myListView.getAdapter()).getWrappedAdapter(); 
+0

stopka widok połowa ekranu. – neworld

+0

ahh, edytowana odpowiedź więcej kodu do naśladowania. – petey

+0

@neworld Mam nadzieję, że to ci pomoże!:) – petey

-3

Spróbuj ustawić następująco:

View footer = new View(getActivity()); 
footer.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT, 100)); 
// 100 is the height, you can change it. 
mListView.addFooterView(footer, null, false); 
41

Zaakceptowanych odpowiedź jest zbyt skomplikowana, a addFooterView nie jest dla tego rodzaju rzeczy. Właściwym i prostszym sposobem jest ustawienie paddingTop i paddingBottom, i musisz ustawić clipToPadding na "false". W widoku listy lub widoku siatki, należy dodać następujące:

android:paddingTop="100dp" 
    android:paddingBottom="100dp" 
    android:clipToPadding="false" 

Dostaniesz puste miejsce na górze i dole, która porusza się wraz z przewijaniem palca.

+0

tak, to jest proste – DayDayHappy

+1

To jest lepsza odpowiedź. – ootinii

+4

Ktoś zauważył, że ListView nie przewija się, jeśli dotykasz dopełnienia? W moim przypadku wyściółka może wynosić nawet 2/3 wysokości ekranu, więc to nie będzie działać dla mnie. Chyba, że ​​nikt nie wie, jak zrobić przewijanie? – darnmason

0

ten 100% działa. adapter ustawić swój kod jak ten

//in getCount 
    @Override 
    public int getCount() { 
    return ArrayList.size()+1; 
     } 
    //in getview make your code like this 
    public View getView(final int i, View view, ViewGroup viewGroup) { 

    view = inflter.inflate(R.layout.yourlayout, null); 

    if(i<getCount()-1) { 
    //your code 
    } 
    else{ 
    ViewGroup itemContainer =(ViewGroup) view.findViewById(R.id.container); 
       itemContainer.setVisibility(View.INVISIBLE); 
    } 

    Return view; 
    }