2016-02-12 4 views
1

У меня есть горизонтальный recycleview. Он отображает список элементов. Моя проблема в том, что он выглядит плохо на больших экранах и ландшафтных режимах. Here looks ok. На ландшафте выглядит плохо, here is screenshot. Как исправить, как на первом снимке экрана?Android горизонтальный recycleview заполнить экран на пейзаж

HomeFragment.class

RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); 
     recyclerView.setHasFixedSize(true); 
     HorizontalRecycleViewAdapter adapter = new HorizontalRecycleViewAdapter(getActivity(), categoriesList); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); 
     recyclerView.setNestedScrollingEnabled(false); 
     recyclerView.setAdapter(adapter); 

fragment_home.xml

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:focusable="true" 
     android:focusableInTouchMode="true"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/my_recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:scrollbars="none" /> 
    </LinearLayout> 

HorizontalRecycleViewAdapter.class

public class HorizontalRecycleViewAdapter extends RecyclerView.Adapter<HorizontalRecycleViewAdapter.SingleItemRowHolder> { 

    private ArrayList<Category> itemsList; 
    private Context mContext; 

    public HorizontalRecycleViewAdapter(Context context, ArrayList<Category> itemsList) { 
     this.itemsList = itemsList; 
     this.mContext = context; 
    } 

    @Override 
    public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null); 
     SingleItemRowHolder mh = new SingleItemRowHolder(v); 
     return mh; 
    } 

    @Override 
    public void onBindViewHolder(SingleItemRowHolder holder, int i) { 
     Category item = itemsList.get(i); 
     holder.title.setText(item.getName()); 
     holder.imageResource.setImageResource(item.getImageSource()); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != itemsList ? itemsList.size() : 0); 
    } 

    public class SingleItemRowHolder extends RecyclerView.ViewHolder { 

     protected TextView title; 
     protected ImageView imageResource; 
     public SingleItemRowHolder(View view) { 
      super(view); 
      this.title = (TextView) view.findViewById(R.id.tvTitle); 
      this.imageResource = (ImageView) view.findViewById(R.id.itemImage); 
      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(v.getContext(), title.getText(), Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
    } 
} 

list_single_card.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <ImageView 
      android:id="@+id/itemImage" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_gravity="center_horizontal" 
      android:scaleType="fitCenter" 
      android:layout_marginBottom="5dp" 
      android:src="@drawable/android" /> 
     <TextView 
      android:id="@+id/tvTitle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/itemImage" 
      android:gravity="center" 
      android:padding="5dp" 
      android:text="Sample title" 
      android:textColor="@android:color/black" 
      android:textSize="18sp" /> 
    </LinearLayout> 
</LinearLayout> 
+1

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

ответ

1

Modified, как @Onur Чевик сказал с layoutparams из ImageView

Вот код:

HorizontalRecycleViewAdapter.class

@Override 
    public void onBindViewHolder(SingleItemRowHolder holder, int i) { 


     Category item = itemsList.get(i); 
     holder.title.setText(item.getName()); 

     holder.imageResource.setImageResource(item.getImageSource()); 
     if (Utils.getScreenOrientation((Activity) mContext) == 2) { 
      holder.imageResource.getLayoutParams().width = Utils.getScreenWidth((Activity) mContext)/getItemCount(); 
     } 

    } 

Utils .class

public class Utils{ 
public static int getScreenOrientation(Activity activity) { 
     Display getOrient = activity.getWindowManager().getDefaultDisplay(); 
     int orientation = Configuration.ORIENTATION_UNDEFINED; 
     if (getOrient.getWidth() == getOrient.getHeight()) { 
      orientation = Configuration.ORIENTATION_SQUARE; 
     } else { 
      if (getOrient.getWidth() < getOrient.getHeight()) { 
       orientation = Configuration.ORIENTATION_PORTRAIT; 
      } else { 
       orientation = Configuration.ORIENTATION_LANDSCAPE; 
      } 
     } 
     return orientation; 
    } 

    public static int getScreenWidth(Activity activity) { 
     Display display = activity.getWindowManager().getDefaultDisplay(); 
     return display.getWidth(); 
    } 
} 
Смежные вопросы