使用RecyclerView时如何使cardView适合屏幕?

时间:2017-05-05 06:46:04

标签: android android-recyclerview android-cardview

我在我的app中使用了一个回收站视图。我正在使用网格布局和一个cardview。我正在使用水平滚动视图。

但是卡的大小不适合屏幕..即使我可以滑动查看内容,它也会出去。我希望卡在水平和垂直方向都适合屏幕。我的代码:

Activity.java

super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_page);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    data_list = new ArrayList<>();
    load_data();
    gridLayoutManager = new GridLayoutManager(this, 1,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(gridLayoutManager);

    adapter = new CustomAdapter(this,data_list);
    recyclerView.setAdapter(adapter);

自定义Adapter.java

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

private Context context;
private List<MyData> my_data;

public CustomAdapter(Context context, List<MyData> my_data) {
    this.context = context;
    this.my_data = my_data;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
    itemView.setMinimumWidth(parent.getMeasuredWidth());
    itemView.setMinimumHeight(parent.getMeasuredHeightAndState());
    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
    holder.userstory.setText(my_data.get(position).getUserstory());
    holder.tasks.setText(my_data.get(position).getTask());
    holder.actual.setText(my_data.get(position).getActuals());
    holder.estimate.setText(my_data.get(position).getTodos());

}

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

public  class ViewHolder extends  RecyclerView.ViewHolder
{
    public TextView userstory,tasks,actual,estimate;
    public CircularSeekBar seekbar;

    public ViewHolder(View itemView)
    {
        super(itemView);
        userstory=(TextView) itemView.findViewById(R.id.tvUserStory);
        tasks=(TextView) itemView.findViewById(R.id.tvTask);
        actual=(TextView) itemView.findViewById(R.id.tvActual);
        estimate=(TextView) itemView.findViewById(R.id.tvEstimate);

    }
}
}

Activity.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="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </LinearLayout>

Card.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res/com.devadvance.circulartest"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:ignore="ResAuto">

    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:elevation="3dp"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="4dp"
        card_view:cardCornerRadius="1dp"
        >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/tvUserStory"
                android:layout_alignParentTop="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentEnd="true" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/tvTask"
                android:layout_below="@+id/tvUserStory"
                android:layout_alignParentStart="true"
                android:layout_alignEnd="@+id/tvUserStory" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/tvActual"
                android:layout_below="@+id/tvTask"
                android:layout_alignParentStart="true"
                android:layout_alignEnd="@+id/tvTask" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/tvEstimate"
                android:layout_below="@+id/tvActual"
                android:layout_alignParentStart="true"
                android:layout_alignEnd="@+id/tvActual" />

        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout>

我希望所有卡的大小相同。任何人都可以指导我如何实现这一目标?谢谢

1 个答案:

答案 0 :(得分:1)

  

设计您的卡片项目如下:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:card_view="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/mainLin"
        android:layout_marginLeft="6dp">

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            card_view:cardUseCompatPadding="true"
            app:cardCornerRadius="4dp"
            app:cardElevation="1dp"
            android:id="@+id/cardDet"
            app:cardUseCompatPadding="true">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical">

                <RelativeLayout
                    android:layout_width="wrap_content"
                    android:layout_height="180dp"
                    android:id="@+id/imgHldr">

                    <LinearLayout
                        android:id="@+id/linBg"
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="#ccF6AB2F"
                        android:padding="10dp"
                        android:gravity="center_vertical"
                        android:layout_alignParentBottom="true"
                        android:layout_alignParentLeft="true"
                        android:layout_alignParentStart="true">

                    </LinearLayout>
                </RelativeLayout>

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:layout_below="@id/imgHldr"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true">

                </LinearLayout>

            </RelativeLayout>

        </android.support.v7.widget.CardView>
    </LinearLayout>

RecyclerView使用

<android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerviewFrag"
                android:scrollbars="vertical"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1" />
  

在您的代码中使用LinearLayoutManager而不是代码编写   格

LinearLayoutManager  horizontalLayoutManagaer
                = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
myList.setLayoutManager(horizontalLayoutManagaer);
                myList.setAdapter(horizontalAdapter);
                horizontalAdapter.notifyDataSetChanged();
                // SnapHelper helper = LinearSnapHelper();
                //helper.attachToRecyclerView(myList);
                snapHelper.attachToRecyclerView(myList);

使用LinearSnapHelper一次显示一个项目

LinearSnapHelper snapHelper = new LinearSnapHelper() {
        @Override
        public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
            View centerView = findSnapView(layoutManager);
            if (centerView == null) {
                return RecyclerView.NO_POSITION;
            }

            int position = layoutManager.getPosition(centerView);
            int targetPosition = -1;
            if (layoutManager.canScrollHorizontally()) {
                if (velocityX < 0) {
                    targetPosition = position - 1;
                } else {
                    targetPosition = position + 1;
                }
            }

            if (layoutManager.canScrollVertically()) {
                if (velocityY < 0) {
                    targetPosition = position - 1;
                } else {
                    targetPosition = position + 1;
                }
            }

            final int firstItem = 0;
            final int lastItem = layoutManager.getItemCount() - 1;
            targetPosition = Math.min(lastItem, Math.max(targetPosition, firstItem));
            return targetPosition;
        }
    };