2017-05-05 2 views
1

Ich benutze eine Recycler-Ansicht in meiner App.In diesem verwende ich ein Raster-Layout und eine cardview.Ich verwende eine horizontale Bildlaufansicht. Wie wird cardView bei der Verwendung von RecyclerView auf dem Bildschirm angezeigt?

Aber die Kartengröße ist passend nicht die screen..It ausgehen wird, obwohl ich klauen können die content.I anzeigen möchten die Karte auf den Bildschirm passen sowohl horizontal als auch vertically.My Code:

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

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

ich die Größe aller Karten wollen same.Can jemand bitte leite mich, wie konnte ich erreichen dies Dank ??

+0

Remove _android: paddingBottom = "@ dimen/activity_vertical_margin" android: paddingLeft = "@ Dimen/activity_horizontal_margin" android: paddingRight = "@ Dimen/activity_horizontal_margin" android: paddingTop = "@ Dimen/activity_vertical_margin"> _ für _RelativeLayout_ – Piyush

+0

ändern android: layout_height = "wrap_content" in 'LinearLayout' zu 'match_parent'. BTW Warum verwenden Sie 'GridLayoutManager', wenn Sie eine Karte mit Bildschirmbreite und -höhe anzeigen möchten? –

+0

Versucht es..still nicht funktioniert..Es appreas, dass in der Karte habe ich 4 Textansichten..Wenn der Text Inhalt ist groß es schafft eine große Karte – Akshay

Antwort

1

Ihre Karte Artikel Design als unten:

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

Für RecyclerView Verwendung

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

in Ihrem Code schreiben LinearLayoutManager folgenden anstelle von Gitter

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

Verwendung LinearSnapHelper ein Element zu einem Zeitpunkt zu zeigen,

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

Ich benutze sdk 23..irgendwo anders herum? – Akshay

+0

Haben Sie versucht, den oben genannten Code zu implementieren? Es spielt auch keine Rolle, ob Sie SDK 23 oder höher verwenden. –

+0

LinearSnapHelper kann nur für SDK 24 verwendet werden. Ich habe es versucht – Akshay

Verwandte Themen