2015-08-13 2 views
2

Я пытаюсь получить три ряда в моем recyclerview, чтобы идеально подогнать экран. Другими словами, распределяется равномерно без прокрутки. У меня есть панель инструментов и recyclerview с двумя столбцами/тремя строками. На данный момент я только что установил высоту элементов, чтобы подогнать экран достаточно близко, но должен быть лучший способ?Распределите сетки равномерно, чтобы соответствовать экрану

activity_main.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <include 
     android:id="@+id/toolbar" 
     layout="@layout/toolbar" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_below="@id/toolbar" 
     android:background="#CCCC" 
     android:layout_width= "match_parent" 
     android:layout_height = "match_parent"/> 

</RelativeLayout> 

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <View 
     android:id="@+id/colorBlock" 
     android:layout_width="match_parent" 
     android:layout_height="170dp" 
     android:background="#CCCCCC" /> 

    <ImageView 
     android:id="@+id/item" 
     android:layout_width="120dp" 
     android:layout_height="120dp" 
     android:layout_centerHorizontal="true" 
     android:padding="16dp" 
     /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="16dp" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     android:textColor="@android:color/white" 
     android:textSize="16sp"/> 
</RelativeLayout> 

ответ

1

По определению, RecyclerView предполагается использовать в тех случаях, когда виды утилизации может произойти - а.к.а. прокручивать, потому что большое количество просмотров. Я не хочу сказать, что его нельзя использовать для небольших коллекций, но нет смысла использовать его в других макетах. На самом деле, не будучи построенным для таких сценариев, становится очень трудно использовать его в сценариях, подобных этому вопросу. Если вы абсолютно хотите использовать RecyclerView, я не знаю, как это сделать в xml. Я думаю, вам придется реализовать свой собственный менеджер макетов для этого.

Если вы открыты для использования других макетов, вот решение, связанное с набором линейных макетов и весов. Не оптимально, нужно использовать вложенные веса, но решение все же:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_below="@id/toolbar" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#ff0000" 
     android:orientation="horizontal"> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#fff000"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#ff0f00"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#ff00f0"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#00ff00" 
     android:orientation="horizontal"> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#f0ff00"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#0fff00"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#00fff0"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#0000ff" 
     android:orientation="horizontal"> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#f000ff"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#0f00ff"/> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="#00f0ff"/> 
    </LinearLayout> 
</LinearLayout> 
+0

Оцените ответ. Я попробую это, так как я до сих пор не нашел никакого решения, использующего recyclerview (не похоже на способ его решения). Благодаря! – Stansley

Смежные вопросы