2015-01-31 3 views
6

У меня есть RecycleView, установленный в горизонтальный. Теперь я хотел бы, чтобы высота соответствовала высоте элемента в представлении. Я не знаю высоты заранее.wrap_content on recycleview, взять высоту элемента (горизонтальный список)

В настоящее время у меня есть это:

Основной фрагмент:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="horizontal" 
     android:layout_marginLeft="1dp" 
     android:layout_marginRight="1dp" 
     android:layout_marginTop="1dp" 
     android:layout_gravity="top" 
     android:id="@+id/my_listview"/> 

</RelativeLayout> 


<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" /> 

Изображение

<ImageView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/banner_image" 
    android:adjustViewBounds="true" 
    android:scaleType="fitXY" 
    android:background="@color/dark_gray" 
    /> 

, но он всегда занимает весь экран. поэтому у меня много пробелов между ними. Есть ли способ, которым я мог бы использовать wrap_content для элементов recycleview?

Это то, что она в настоящее время выглядит следующим образом: enter image description here

Я поместил 2 баннера в настоящее время, верхний один с большим пробелом и уменьшенным изображением является один с recyclerview. Ниже приведено только изображение, размещенное в изображении (это то, на что он должен выглядеть, но я хочу его с помощью recyclerview, чтобы я мог прокручивать баннеры, если у меня есть несколько)

+0

Вы определили свой recyclerView с высотой = "match_parent". Что произойдет, если вы замените это на «wrap_content»? –

+0

Затем он занимает неправильную высоту, размер баннера составляет около 60 пикселей в высоту, но с wrap_content он будет изменять размер до 30 или что-то еще. –

+1

Что произойдет, если вы определите свой recyclerView с высотой как 'wrap_content' и удалите' scaleType' и 'adjustViewBounds' из' ImageView'? –

ответ

0

Возможно, вы неправильно нарисуете макет.

Вы использовали?

layoutInflater.inflate(R.layout.your_layout, null); 

Попробуйте использовать вместо этого. (Другой способ измерения столовых с)

layoutInflater.inflate(R.layout.your_layout, parent, false); 
+0

В настоящее время я использую следующий код для его раздувания: 'Просмотр v = LayoutInflater.from (mContext) .inflate (R.layout.banner_item, parent, false);' –

1

Теперь я хотел бы высоту, чтобы соответствовать высоте элемента в зрения. Я не знаю высоты заранее.

При передаче макета, LinearLayoutManager не может предсказать высоту всех взглядов вниз в адаптере, которые еще предстоит создать, опережая время.

Вы можете measure() вид товара, возможно первый, от адаптера, а затем установить высоту RecycleView с помощью кода.

Если все элементы могут иметь разную высоту, вам придется измерять их все, что, безусловно, не является правильным способом для хорошего пользовательского интерфейса.

+0

Все изображения имеют одинаковые размеры –

0

Есть ли причина, почему у вас есть RecycleView, обернутый внутри RelativeLayout? Сначала я попытался переместить RecycleView из RelativeLayout.

Во-вторых, я вижу, что ваш ViewPager имеет layout_weight, но я не вижу атрибута android:weightSum в родительском макете. Есть ли причина, по которой вы указываете ViewPager, чтобы иметь weight, но не RecycleView? Пробовали ли вы установить размер RecyleView на какой-то dp, чтобы проверить правильность компоновки, и ViewPager использует атрибут weight правильно?

В-третьих, я постараюсь поиграть с Imageview. Попробуйте, может быть, обернуть его внутри RelativeLayout? Вам придется поиграть с параметрами там и посмотреть, если это сработает для вас. Поскольку вы хотите что-то обычай, нет прямого ответа на этот вопрос.

+0

Спасибо за ваш ответ, ни одно из ваших предложений, похоже, не сработало. при установке его на фиксированный размер dp пробелы, кажется, уменьшаются соответственно до набора dp. –

0

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

// inner class to hold a reference to each item of RecyclerView 
    public static class ViewHolder extends RecyclerView.ViewHolder { 

     public ImageView imgViewIcon; 

     public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
      imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon); 
      int colSpan = 2; 
      imgViewIcon.getLayoutParams().height = (int) (displayMetrics.widthPixels/colSpan); 
      imgViewIcon.getLayoutParams().width = (int) (displayMetrics.widthPixels/colSpan); 

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