美文网首页
RecycleView水平滚动时设置图片item宽高比及适配问题

RecycleView水平滚动时设置图片item宽高比及适配问题

作者: 若尘_b230 | 来源:发表于2019-06-27 15:26 被阅读0次

            RecycleView目前已经取代ListView、GridView成为主流滑动列表首选组件,在各类列表展示中都能一展风采,下面主要讲讲如何设置它的item固定宽高比及适配不同的机型展现统一的样式。

          控制宽高比首选约束布局,它的实现方式最为简洁,重点是设置约束比例:layout_constraintDimensionRatio(注:约束比例要生效,layout_width或者layout_height至少有一个的值需要为0dp,否则约束比例不生效),直接来看看item布局的实现方式吧:

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

    <ImageView

            android:id="@+id/image"

            android:layout_width="0dp"

            android:layout_height="0dp"

            android:scaleType="centerCrop"

            android:src="@drawable/img"

            app:layout_constraintDimensionRatio="h,16:9"

            app:layout_constraintLeft_toLeftOf="parent"

            app:layout_constraintRight_toRightOf="parent"

            app:layout_constraintTop_toTopOf="parent"

            app:layout_constraintBottom_toBottomOf="parent"

            />

    </android.support.constraint.ConstraintLayout>

    此时,item是铺满整个布局,只是根据图片的宽度保持了宽高比,当设置RecycleView水平滚动时,图片宽度会占满一个屏幕,需要设置item的宽度。如果设置固定值,则在不同手机上同一屏展示的item数量可能会不同,此时在adapter初始化实例的时候,onCreateViewHolder方法中强行设置item的宽度,比如设置为屏幕宽度的40%,具体实现如下:

    //加载item 的布局 创建ViewHolder实例

    @Override

    public ViewHolderonCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_horizontal_img, parent,false);

        ConstraintLayout.LayoutParams param =new ConstraintLayout.LayoutParams(view.getLayoutParams());

        WindowManager wm = (WindowManager) parent.getContext().getSystemService(parent.getContext().WINDOW_SERVICE);

        DisplayMetrics dm =new DisplayMetrics();

        wm.getDefaultDisplay().getMetrics(dm);

        int width = dm.widthPixels;        // 屏幕宽度(像素)

        param.width = (int)(width*0.4);

        view.setLayoutParams(param);

        ViewHolder holder =new ViewHolder(view);

        return holder;

    }

    设置完成以后item所占宽度为屏幕的40%,因为宽度是根据屏幕获取,故在所有手机上占用宽度都一样,最终实现效果如下图:

    相关文章

      网友评论

          本文标题:RecycleView水平滚动时设置图片item宽高比及适配问题

          本文链接:https://www.haomeiwen.com/subject/cllrcctx.html