2017-05-05 35 views
1

我在我的应用程序中使用回收站视图。我使用网格布局和cardview.I使用水平滚动视图。 如何在使用RecyclerView时使cardView适合屏幕?

但该卡尺寸不拟合screen..It是走出去,即使我可以刷卡查看content.I想要的卡,以适应屏幕在水平方向以及vertically.My代码:

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> 

我想要的所有卡片尺寸same.Can请人指导我,我怎么能做到这一点??谢谢

+0

删除_android: paddingBottom =“@ dimen/activity_vertical_margin” 机器人:paddingLeft = “@扪/ activity_horizo​​ntal_margin” 机器人:paddingRight = “@扪/ activity_horizo​​ntal_margin” 机器人:paddingTop = “@扪/ activity_vertical_margin”> _用于_RelativeLayout_ – Piyush

+0

变化机器人:在'LinearLayout' layout_height = “WRAP_CONTENT”到'match_parent'。 顺便说一句,为什么当你想显示一个卡的屏幕宽度和高度时,你使用'GridLayoutManager'? –

+0

试过了..不工作..它appreas,在卡中我有4个文本浏览..如果文本内容很大,它正在创造一个大卡片 – Akshay

回答

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; 
     } 
    }; 
+0

我使用sdk 23..任何其他方式? – Akshay

+0

您是否尝试实现上述代码?如果您使用sdk 23或更高版本,也没关系。 –

+0

LinearSnapHelper只能用于sdk 24.我试过了 – Akshay