Mój widok RecyclerView i element mają szerokość match_parent, ale wynik jest następujący:
<view
class="android.support.v7.widget.RecyclerView"
android:layout_width="match_parent"
i przedmioty:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_itm"
android:orientation="horizontal"
android:layout_width="match_parent"
pełny:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_itm"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="100"
android:gravity="right"
>
<Button
android:layout_width="0dp"
android:layout_weight="15"
android:layout_height="fill_parent"
android:text="ملاحظات"
android:id="@+id/button" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="20"
android:gravity="center"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
fab:fab_plusIconColor="#ff56ff83"
fab:fab_colorNormal="@color/d_red"
fab:fab_colorPressed="#ff5c86ff"
fab:fab_size="mini"
fab:fab_icon="@drawable/ic_remove_white"
android:id="@+id/fab_rmv" />
<esfandune.ir.elmikarbordiardakan.other.CustomTxtView
android:layout_weight="25"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="0"
android:gravity="right|center_vertical"
android:id="@+id/txt_takhir_itm" />
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
fab:fab_plusIconColor="@color/colorprimarylight"
fab:fab_colorNormal="@color/colorprimarydark"
fab:fab_colorPressed="@color/colorprimary"
fab:fab_size="mini"
fab:fab_icon="@drawable/ic_add_white"
android:id="@+id/fab_add" />
</LinearLayout>
</LinearLayout>
<Spinner
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="10"
android:id="@+id/sp_nomre_itm"
android:entries="@array/degrees"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="10"
android:gravity="center"
>
<!--LinearLayout baraye ine ke nameshod fab ro weight behosh dad-->
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
fab:fab_plusIconColor="#ff56ff83"
fab:fab_colorNormal="@color/d_green"
fab:fab_colorPressed="@color/d_orange"
fab:fab_size="normal"
fab:fab_icon="@drawable/ic_done_white"
android:id="@+id/fab_hazr" />
</LinearLayout>
<esfandune.ir.elmikarbordiardakan.other.CustomTxtView
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="100"
android:gravity="right|center_vertical"
android:id="@+id/txt_ghybtNumber_itm" />
<esfandune.ir.elmikarbordiardakan.other.CustomTxtView
android:layout_weight="30"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="عباسعلی ملاحسینی اردکانی"
android:gravity="right|center_vertical"
android:id="@+id/txt_title_itm"
android:layout_marginRight="10dp"
/>
<view
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="10"
class="de.hdodenhof.circleimageview.CircleImageView"
android:id="@+id/view"
android:src="@drawable/mmrdf"
/>
</LinearLayout>
android
android-recyclerview
abbasalim
źródło
źródło
Wewnątrz metody onCreateViewHolder (...) adaptera, w której nadmuchujesz widok .. musisz zdefiniować ViewGroup jako element nadrzędny, co otrzymasz z pierwszego parametru metody onCreateViewHolder (...).
zobacz poniższy wiersz w drugim parametrze, który przekazuję ViewGroup. Spowoduje to automatyczne dopasowanie widoku do jego elementu nadrzędnego:
rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
/// pełny kod znajduje się poniżej
public View onCreateViewHolder(ViewGroup parent, int position) { // TODO Auto-generated method stub View rowView; LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
źródło
Używałem
FrameLayout
zMATCH_PARENT
dla szerokości i widziałem to samo zachowanie zRecyclerView
+LinearLayoutManager
. Żadna z powyższych zmian nie działała dla mnie, dopóki nie wykonałem następujących czynności wonCreateViewHolder
wywołaniu zwrotnym:@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.note_layout, parent, false); v.setLayoutParams(new RecyclerView.LayoutParams( ((RecyclerView) parent).getLayoutManager().getWidth(), context.getResources() .getDimensionPixelSize(R.dimen.note_item_height))); return new ViewHolder(v); }
Wyraźnie wygląda na błąd w (zgaduję) implementacji RecyclerView.
źródło
spróbuj tego, ustawiając parametry układu dla swojego przedmiotu w adapterze.
View viewHolder= LayoutInflater.from(parent.getContext()) .inflate(R.layout.item, parent, false); viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); ViewOffersHolder viewOffersHolder = new ViewOffersHolder(viewHolder); return viewOffersHolder;
źródło
Naprawiłem to w ten sposób. W moim przypadku problem z plikiem układu aktywności, ponieważ używam ConstraintLayout jako głównego układu aktywności.
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolBar" layout="@layout/toolbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@+id/fragment_container" android:layout_width="0dp" android:layout_height="wrap_content" android:background="@color/accent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/toolBar" /> </android.support.constraint.ConstraintLayout>
źródło
W moim przypadku problem tkwił w
RecyclerView
deklaracji XML,layout_width
było 0dp co oznacza match_constraints, gdy zmieniłem to namatch_parent
, elementy zaczęły wypełniać całąRecyclerView
szerokość:<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="0dp" <-- changed this to "match_parent" android:layout_height="0dp" android:layout_marginBottom="45dp" android:background="@android:color/transparent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_default="wrap" app:layout_constraintHeight_max="360dp" app:layout_constraintHeight_min="60dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/header"/>
źródło
Rozwiązałem to za pomocą:
myInflatedRowLayout.getLayoutParams().width = vg.getWidth();
Zastępuje
MATCH_PARENT
on rzeczywistą szerokościąRecyclerView
.źródło
To zadziałało dla mnie.
wymień to
View view = View.inflate(parent.getContext(), R.layout.row_timeline, null); return new TimeLineViewHolder(view, viewType);
przez to
View rootView = LayoutInflater.from(context).inflate(R.layout.row_timeline, null, false); RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); rootView.setLayoutParams(lp); return new TimeLineViewHolder(rootView, viewType);
źródło
Nie widzę pełnego kodu, ale mogę zgadnąć, że niektóre widoki wewnątrz LinearLayout to „
wrap_content
”. Musisz sprawić, by jeden lub kilka z nich rozszerzyło się na pełną szerokość, używając 'android:layout_weight="1"
'aktualizacja: masz dużo zbędnych
layout_weight
plików. Zrób je wszystkie 'wrap_content
' i tylko dla jednego z nich dodajlayout_weight=1
- dla ostatniego CustomTextView. W ten sposób zajmie całą pustą przestrzeń.źródło
Utknąłem z tym problemem przez jakiś czas, a rozwiązaniem, które działało dla mnie, było umieszczenie 2 widoków z match_parent, jeden wewnątrz drugiego.
Jeśli zrobiłem to w układzie mojej pozycji na liście:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#F00" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent"> </RelativeLayout>
chociaż jest to układ względny, jak wspominali inni, i pomijam widok rodzica, ale fałszywy w inflaterze, po prostu nie pojawiłby się w ogóle (czerwone tło do sprawdzenia).
Ale kiedy to zrobiłem:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:background="#0F0" android:layout_height="match_parent"/> </RelativeLayout>
Pojawił się zielony układ i zajął całą przestrzeń.
Więc samo posiadanie widoku podrzędnego wewnątrz głównego z match_parent rozwiązuje problem, nie mam pojęcia dlaczego.
źródło