【问题标题】:How to make RecyclerView to width="wrap_content"如何使 RecyclerView 为 width="wrap_content"
【发布时间】:2016-02-29 08:08:00
【问题描述】:

我想做这样的 RecyclerView:

但在我的情况下,子视图未设置为 width="wrap_content" 或者 RecyclerView 未设置为 width="wrap_content""center"

这里是activity_layout.xml中的RecyclerView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
</RelativeLayout>

这里是设置适配器 onCreate:

    public void initRecyclerView(List<Invitation> invitationList) {
        recyclerView.setHasFixedSize(true);
        GridLayoutManager manager = new GridLayoutManager(this, 4);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(new ItemGridAdapter(getApplicationContext(), invitationList));
    }

这是我的适配器:

public class ItemGridAdapter extends RecyclerView.Adapter<ItemGridAdapter.ViewHolderItem> {
    private final Context context;
    private final List<Invitation> list;
    private final DrawableHelper drawableHelper;

    public ItemGridAdapter(Context context, List<Invitation> list) {
        this.context=context;
        this.list=list;
        this.drawableHelper = new DrawableHelper();
    }

    @Override
    public ItemGridAdapter.ViewHolderItem onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_grid, parent, false);
        return new ItemGridAdapter.ViewHolderItem(context,view);
    }

    @Override
    public void onBindViewHolder(final ItemGridAdapter.ViewHolderItem viewHolder, int position) {
        Invitation invitation = list.get(position);
        viewHolder.position=position;
        Picasso.with(context)
               .load(invitation.getCustomUser().getAvatar())
               .transform(new CircleTransformation())
               .placeholder(drawableHelper.getDrawableForName(invitation.getCustomUser().getFullName()))
               .into(viewHolder.userIcon);
        if (invitation.getYelpID()!=null&&invitation.getYelpID().length()>0){
            viewHolder.votedIcon.setVisibility(View.VISIBLE);
        }else{
            viewHolder.votedIcon.setVisibility(View.GONE);
        }
    }

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

    public Object getItem(int position) {
        return position;
    }


    public long getItemId(int position) {
        return position;
    }

    public static class ViewHolderItem extends RecyclerView.ViewHolder {
        public ImageView votedIcon;
        public ImageView userIcon;
        Context mContext;
        int position;
        public ViewHolderItem(Context mContext,View itemView) {
            super(itemView);
            this.mContext = mContext;
            userIcon=(ImageView)itemView.findViewById(R.id.userIcon); 
            votedIcon = (ImageView)itemView.findViewById(R.id.votedIcon);
        }
    }

}

这是适配器的项目 R.layout.item_grid 的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center">


        <ImageView
            android:background="@drawable/white_circle"
            android:padding="3dp"
            android:id="@+id/userIcon"
            android:layout_width="50dp"
            android:layout_height="50dp"/>

        <ImageView
            android:id="@+id/votedIcon"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/icon_voted"/>
</RelativeLayout>

【问题讨论】:

  • 为什么要嵌套 2 相对布局? 1 绰绰有余。
  • @FrankN.Stein 在用户图片下方添加 white_circle
  • @FrankN.Stein 为什么不呢?
  • 因为嵌套布局不利于性能。只需在另一个下方添加另一个ImageView
  • @FrankN.Stein 好的,更新了布局...但 RecyclerView 仍然不在 wrap_content 的中心

标签: android center android-recyclerview


【解决方案1】:

Android Support Library as of 23.2默认在RecyclerView中支持这个WRAP_CONTENT。

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2015-02-13
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多