#android #android-recyclerview
#Android #android-recyclerview
Вопрос:
В моем приложении я хочу динамически увеличивать высоту представления recycler. По мере добавления нового элемента в разделе жалобы высота представления recycler должна увеличиваться. Есть ли способ это сделать? Пожалуйста, помогите мне с этим. Заранее спасибо.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@ id/complaint_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_line"
android:padding="@dimen/layout_margin"
android:text="Complaints"
android:textColor="@color/textColorFullBlack" />
<LinearLayout
android:id="@ id/complaints_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="@dimen/layout_margin"
android:layout_weight="1">
<android.support.v7.widget.RecyclerView
android:id="@ id/complaint_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/layout_margin"
android:divider="@color/toolBarBackground"
android:groupIndicator="@android:color/transparent" />
</LinearLayout>
<TextView
android:id="@ id/instructions_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_line"
android:padding="@dimen/layout_margin"
android:text="Instructions"
android:textColor="@color/textColorFullBlack" />
<FrameLayout
android:id="@ id/instructions_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="@dimen/layout_margin"
android:layout_weight="1">
<android.support.v7.widget.RecyclerView
android:id="@ id/instructions_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/layout_margin"
android:divider="@color/toolBarBackground"
android:groupIndicator="@android:color/transparent" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:orientation="horizontal">
<in.palmpower.videocon.uicommon.widget.EditText
android:id="@ id/search_text_field"
style="@style/FormEditText"
android:layout_width="0dp"
android:layout_gravity="center_vertical"
android:layout_margin="@dimen/one_dp"
android:layout_weight="1"
android:background="@android:color/white"
android:inputType="textFilter"
android:padding="@dimen/search_edit_text_padding"
android:privateImeOptions="nm" />
<Button
android:id="@ id/add_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/edittext_hint_search"
android:padding="@dimen/button_padding"
android:text="@string/add_button_string"
android:textColor="@color/textColorWhite" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Комментарии:
1. @Christopher Я указал высоту в xml. Не более того.
2. установите wrap_content для вашего recyclerview и родительского макета элемента строки
Ответ №1:
Застрял в той же проблеме, которую я использовал RecyclerView
с wrap_content
inside LinearLayout
, я меняю LinearLayout
RelativeLayout
, и он устанавливает RecyclerView
высоту на основе дочерних элементов.
Комментарии:
1. Это действительно работает для меня после многих часов поиска и попыток.. Спасибо
2. рад, что это помогло.
Ответ №2:
Это сработает для вас
RecyclerView mRecyclerView
= (RecyclerView) findViewById(R.id.complaint_recycler_view);
int originalItemSize = iteList.size();
ViewGroup.LayoutParams params = mRecyclerView.getLayoutParams();
if (itemList.size() > originalItemSize ){
params.height = params.height 100;
originalItemSize = itemList.size();
mRecyclerView.setLayoutParams(params);
}
Ответ №3:
я предлагаю вам поместить recyclerview в любой другой макет (предпочтительнее относительный макет). Затем измените высоту / ширину recyclerview в качестве родительского элемента для этого макета и установите высоту / ширину родительского макета в качестве содержимого переноса. это работает для меня
Ответ №4:
WRAP_CONTENT не будет работать, если вы хотите, чтобы RecyclerView занимал часть экрана. Если вы хотите, чтобы под RecyclerView было другое содержимое, вы можете поместить RecyclerView внутри LinearLayout и использовать следующий код для динамического изменения высоты.
Я предполагаю, что вы используете список (complaint_list) для хранения жалоб.Соответствующим образом отрегулируйте complaint_height
ViewGroup.LayoutParams params = mRecyclerView.getLayoutParams();
int complaint_height=400;
if (complaints_list.size() > 2) {
params.height = ((complaint_list.size() - 1) * 100) complaint_height;
} else {
params.height = complaint_height 100;
}
mRecyclerView.setLayoutParams(params);
Комментарии:
1. вы разместили RecyclerView внутри LinearLayout с помощью wrap_content ?