Как да центрирате RecyclerView в центъра (и без превъртане), когато е възможно?

Това е кратък въпрос:

Да предположим, че имам RecyclerView, който има неопределен брой елементи, какво трябва да направя с него, така че ако има малък брой елементи, които (всички) могат да се поберат на екрана, те ще бъдат центрирани и потребителят няма да може да превъртите?

Разбира се, ако има твърде много елементи, които не могат да се поберат на екрана, бих искал RecyclerView да ги показва всички както обикновено (от началото до това колко може да показва и позволява превъртане).

За да разберете какво имам предвид, мисля, че такова нещо е възможно, когато се използва ScrollView (или HorizontalScrollView, ако е хоризонтален), заедно с LinearLayout, който настройва гравитацията да бъде центрирана.


person android developer    schedule 16.12.2015    source източник


Отговори (2)


Добре, мисля, че намерих начин:

първо изчакваме RecyclerView да завърши своя процес на оформление, както намерих тук .

След това трябва да проверите кои дъщерни изгледи са показани (достъпни в LayoutManager, който използвате) и да погледнете първия и последния.

Ако и двата са точно същите като тези на общите елементи, това означава, че всички необходими изгледи са показани, така че мога да добавя полета от двете страни на RecyclerView (или подложка на неговия контейнер), според оставащото пространство.

person android developer    schedule 16.12.2015

Намерих един сложен начин да го постигна.

Основна концепция: задайте височината на RV динамично в код

    RecyclerView rv= (RecyclerView) findViewById(R.id.rv);
    rv.setAdapter(new MySlideUpAdapter());
    rv.setLayoutManager(new LinearLayoutManager(this));
    ViewGroup.LayoutParams layoutParams = rv.getLayoutParams();
    layoutParams.height=100;
    rv.setLayoutParams(layoutParams);

Може да се наложи да изчислите височината на фургона по брой деца*височина на деца, за да получите точна стойност. И не забравяйте да сравните височината с височината на родителското оформление, уверете се, че височината на RV е по-малка от височината на родителското оформление.

Ето моето оформление

   <RelativeLayout...>
     <android.support.v7.widget.RecyclerView
       android:id="@+id/rv"
       android:layout_centerInParent="true"
       android:layout_width="match_parent"
       <-height will be changed in code, ignore the 50dp-> 
       android:layout_height="50dp">
     </android.support.v7.widget.RecyclerView>
   </RelativeLayout>

въведете описание на изображението тук

person 空気嫁    schedule 16.12.2015
comment
Ами ако размерите на изгледите са различни един от друг? Или има wrap_content височина, която може да се променя в зависимост от съдържанието на данните? - person android developer; 16.12.2015
comment
@androiddeveloper да.. Моят начин е твърде сложен. За различни изгледи на артикул кодът може да бъде 1. view.measuer(0,0) 2. view.getmesuredheight. Харесвам твоя начин! - person 空気嫁; 17.12.2015
comment
Благодаря ти. Всъщност ти положи повече усилия, затова ти давам +1. :) - person android developer; 17.12.2015