У меня есть фрагмент, содержащий RecyclerView с layout_width = "match_parent":
<android.support.v7.widget.RecyclerView 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"
android:layout_gravity="center"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity$PlaceholderFragment" />
Элемент в RecyclerView - это CardView, также с layout_width = "match_parent":
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"
card_view:cardCornerRadius="4dp">
<TextView
android:layout_gravity="center"
android:id="@+id/info_text"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
android:textAppearance="?android:textAppearanceLarge"/>
</android.support.v7.widget.CardView>
Я увеличиваю вид элемента, как показано ниже:
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
CardView v = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_listitem, null, true);
ViewHolder vh = new ViewHolder(v);
return vh;
}
Но когда я запускаю приложение, CardView отображается как wrap_content, как показано ниже:
Обратите внимание, что это было запущено на эмуляторе, а не на реальном устройстве.
Я что-то делаю не так или это ошибка?
Ответы:
Документы для
inflate
:Здесь важно , чтобы не поставить так, но ничего поставить родитель:
Предоставление
parent
View позволяет надувному модулю знать, какие параметры макета использовать. Подачаfalse
параметра сообщает ему, что пока не следует прикреплять его к родительскому элементу. Это то, чтоRecyclerView
сделает за вас.источник
layout_width
былwrap_content
. Это странно, потому что это не должно влиять на представление списка! Насколько я понимаю, когда вы предоставляете false в качестве параметра layoutinflater, ListView добавляет элементы списка в ListView с параметрами макета, соответствующими самому ListView! : 0ViewHolder onCreateViewHolder(...) { View v = new MyItemView(parent.getContext); return new ViewHolder(v); }
Используйте RelativeLayout в качестве непосредственного родителя CardView.
источник
Это сработало для меня,
источник
Как я это сделал:
Explanation: В вашем onCreateViewHolde, как только вы получите представление карты, получите ширину экрана, а затем установите соответствующий параметр макета для просмотра карты.
источник
Кажется, это исправлено в
'com.android.support:recyclerview-v7:23.2.1'
См .: RecyclerView wrap_content для дальнейшего обсуждения.
источник
Просто установите новые параметры макета
источник
Реализация по умолчанию заставляет использовать wrap_content в менеджере компоновки по умолчанию:
Все, что вам нужно сделать, это переопределить этот метод в LayoutManager следующим образом:
источник
Это работает для меня
источник
Используйте card_view: contentPadding с отрицательным значением
Это сработало для меня
источник
Оберните
CardView
макет шириной:match_parent
источник