【问题标题】:RecyclerView number of visible itemsRecyclerView 可见项目数
【发布时间】:2016-02-03 14:51:12
【问题描述】:

我正在我的应用程序中创建一个水平的 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);

这是一个项目的布局

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

如您所见,我尝试使用 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);
        }
    }
}

【问题讨论】:

  • "每个项目都占用了屏幕的所有宽度"。 "这里是一个项目的布局" -> android:layout_width="match_parent"
  • 计算屏幕宽度并设置您要检查的最大元素数
  • @Pedro Oliveira,我尝试了 wrap_content,但没有任何改变

标签: android android-recyclerview


【解决方案1】:

对于你需要计算屏幕的宽度并动态设置宽度下面是我的代码

在您的ViewHolder 初始化中添加以下代码

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

布局文件在这里

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

制作一个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;
    }

希望对你有帮助!

【讨论】:

  • 检查我现在添加了一种方法检查
  • 我注意到了这个问题。就是当我滚动图像时 - 我像一张长图像一样滚动它们。因此,当我停止滚动时 - 它会在任何地方停止,并且可以显示部分 3 张图像。但是当我停止滚动时应该只显示两个,所以图像必须调整到边缘(就像我发布的初始解决方案一样。当我停止这个默认的 - 总是会显示一个图像)
  • @Androider 除数 2 或更少/更多取决于您要显示多少 imageView。对于滚动问题,请检查 LayoutManger
  • @MaheshwarLigade - 在你的逻辑中,你已经占据了整个屏幕宽度,假设回收器视图的宽度与屏幕宽度不同,请告诉我如何计算回收器视图宽度?
  • @MaheshwarLigade 我用来查找recycler 视图宽度的方法是:创建一个RelativeLayout 作为Recycler 视图的父级并从父级View view = relativeLayout.getWidth() 获取宽度此代码将返回recycler 父级的宽度以像素为单位查看。基本上回收器视图宽度与我的代码中的父宽度相同。所以我用这种方法来获取宽度..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
相关资源
最近更新 更多