RecyclerView可见项目数量

And*_*der 7 android android-recyclerview

我正在我的应用程序中创建一个水平的RecyclerView.
它必须一次在屏幕上显示2个图像(因此每个图像的宽度必须是屏幕的50%).
现在它工作正常,但每个项目占据屏幕的所有宽度.

这是我的代码

mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_main_ads);
        LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(getActivity());
        mLinearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRecyclerView.setLayoutManager(mLinearLayoutManager);
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(tmp, R.layout.lv_main_screen);
        mRecyclerView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

这是项目的布局

<?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"
              android:weightSum="1">

    <ImageView
        android:id="@+id/iv_main_ad"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:scaleType="fitXY"
        android:src="@drawable/baner_gasoline"
        />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我尝试使用Layout_gravity ="0.5",但它没有帮助.

我试图指定layout_width = ... dp,但我无法获得正好一半的屏幕.

我想在项目布局中添加另一个ImageView,但在这种情况下我会遇到适配器的麻烦,因为我想实现带圆圈(无限)的水平列表视图

这是我的适配器:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyHolder> {

    private List<Integer> mImages;
    private int itemLayout;

    public RecyclerViewAdapter(ArrayList<Integer>  imageResourceIds, int itemLayout) {
        this.mImages = imageResourceIds;
        this.itemLayout = itemLayout;
    }


    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
        return new MyHolder(v);

    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {

        holder.adIv.setImageResource(mImages.get(position));

    }

    @Override
    public int getItemCount() {
        return mImages.size();
    }

    public static class MyHolder extends RecyclerView.ViewHolder {
        protected ImageView adIv;

        private MyHolder(View v) {
            super(v);
            this.adIv = (ImageView) v.findViewById(R.id.iv_main_ad);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*ade 7

因为您需要计算屏幕的宽度并在下面动态设置宽度是我的代码

ViewHolderinitilisation中添加以下代码

llImg = (LinearLayout) itemView.findViewById(R.id.llImg);

            llImg.getLayoutParams().width = (int) (Utils.getScreenWidth(itemView.getContext()) / 2);
            llImg.getLayoutParams().height = (int) (Utils.getScreenWidth(itemView.getContext()) / 2);

            imgView = (ImageView) itemView.findViewById(R.id.imgView);
Run Code Online (Sandbox Code Playgroud)

布局文件在这里

 <LinearLayout
        android:id="@+id/llImg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center">

        <ImageView
            android:id="@+id/imgView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

制作一个Utils.java

public static int getScreenWidth(Context context) {

        if (screenWidth == 0) {
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            screenWidth = size.x;
        }
        return screenWidth;
    }
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助 !