2015-06-07 2 views
53

Мой RecyclerView и пункт match_parent ширину, но результат: enter image description hereширина match_parent не работает в RecyclerView

<view 
    class="android.support.v7.widget.RecyclerView" 
    android:layout_width="match_parent" 

и предметы:

<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" 

полный:

<?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> 

ответ

179

В вашем адаптере, где вы раздуваете изделие в onCreateViewHolder, является вторым параметром inflate по телефону null?.

Если это так, измените его на parent, который является первым параметром в сигнальной функции onCreateViewHolder.

View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, parent, false); 

Если вам нужен второй параметр будут null тогда, когда вы получаете ссылку вида на надувать, сделайте следующее

метода
View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, null, false); 
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
rootView.setLayoutParams(lp); 
return new RecyclerViewHolder(rootView); 
+18

Вы святые – razielsarafan

+1

Святые наверняка. Это у меня было около часа. –

+0

Эта работа !! спасибо –

0

Не могу видеть ваш полный код, но можно догадаться, что некоторые из видов внутри вашего Linear Макет: «wrap_content». Вам нужно сделать одну или некоторые из них расширить до полной ширины с помощью «android:layout_weight="1"»

обновления: у вас есть много избыточных layout_weight-х гг. Сделайте их «wrap_content», и только для одного из них добавьте layout_weight=1 - для последнего CustomTextView. Таким образом, он займет все пустое пространство.

+0

смотрите полный код, я отредактировал мой вопрос –

9

Внутри onCreateViewHolder (...) адаптера, где вы накачивание представление .. вы должны определить ViewGroup как parent.This вы получите от 1-го параметра метода onCreateViewHolder (...).

см. Нижнюю строку во втором параметре, который я передаю в ViewGroup. Это будет автоматически соответствовать виду своего родителя:

rowView=inflater.inflate(R.layout.home_custom_list, parent,false); 

/// полного код ниже

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); 
3

попробовать это, когда вы установили макет Params для элемента адаптера.

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; 
2

Я решил это с:

myInflatedRowLayout.getLayoutParams().width = vg.getWidth(); 

Это заменяет MATCH_PARENT с фактической шириной RecyclerView.

+1

Спасибо, это работает. –

1

Я использовал FrameLayout с шириной MATCH_PARENT и наблюдал за тем же поведением с RecyclerView + LinearLayoutManager. Ни один из вышеуказанных изменений не работал для меня, пока я не сделал следующее в onCreateViewHolder обратного вызова:

@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); 
} 

Ясно выглядит как ошибка в (я предполагаю, что) реализация RecyclerView.

2

Я сделал исправление, как это. В моем случае проблема с файлом макета активности, потому что я использую ConstraintLayout в качестве корневого макета. Может быть и для вас.

<?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="match_parent" 
     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> 
+1

Трудно поверить, но просто заменив окружающий ConstraintLayout LinearLayout решил это для меня тоже ... – fjc

+0

Отлично! @fjc рад, что это сработало для вас тоже, спасибо –

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