Android RecyclerView StaggeredGridLayoutManager Example

activity_main.xml
 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/rl"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:padding="16dp"     tools:context=".MainActivity"     android:background="#ffffff"     >     <android.support.v7.widget.RecyclerView         android:id="@+id/recycler_view"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:scrollbars="vertical"         >     </android.support.v7.widget.RecyclerView> </RelativeLayout> 
custom_view.xml
 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:card_view="http://schemas.android.com/apk/res-auto"     android:id="@+id/card_view"     android:layout_width="match_parent"     android:layout_height="wrap_content"     card_view:cardCornerRadius="4dp"     card_view:cardMaxElevation="2dp"     card_view:cardElevation="1dp"     >     <TextView         android:id="@+id/tv"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:textColor="#000"         android:textSize="20dp"         android:layout_margin="2dp"         android:padding="5dp"         android:layout_gravity="center"         android:gravity="center"         android:fontFamily="sans-serif-condensed"         /> </android.support.v7.widget.CardView> 
MainActivity.java
 package com.cfsuman.me.androidcode;  import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.Window; import android.widget.RelativeLayout;   public class MainActivity extends AppCompatActivity {     private Context mContext;      RelativeLayout mRelativeLayout;     private RecyclerView mRecyclerView;      private RecyclerView.Adapter mAdapter;     private RecyclerView.LayoutManager mLayoutManager;       @Override     protected void onCreate(Bundle savedInstanceState) {         // Request window feature action kafe         requestWindowFeature(Window.FEATURE_ACTION_BAR);         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          // Get the application context         mContext = getApplicationContext();          // Change the action kafe color         getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.RED));          // Get the widgets reference from XML layout         mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);         mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);          // Initialize a new String array         String[] colors = {                 "Red","Green","Blue","Yellow","Magenta","Cyan","Orange",                 "Aqua","Azure","Beige","Bisque","Brown","Coral","Crimson"         };          /*             StaggeredGridLayoutManager                 A LayoutManager that lays out children in a staggered grid formation. It supports                 horizontal & vertical layout as well as an ability to layout children in reverse.                  Staggered grids are likely to have gaps at the edges of the layout. To avoid these                 gaps, StaggeredGridLayoutManager can offset spans independently or move items                 between spans. You can control this behavior via setGapStrategy(int).         */         /*             public StaggeredGridLayoutManager (int spanCount, int orientation)                 Creates a StaggeredGridLayoutManager with given parameters.              Parameters                 spanCount : If orientation is vertical, spanCount is number of columns.                     If orientation is horizontal, spanCount is number of rows.                 orientation : VERTICAL or HORIZONTAL         */         // Define a layout for RecyclerView         mLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);         mRecyclerView.setLayoutManager(mLayoutManager);          // Initialize a new instance of RecyclerView Adapter instance         mAdapter = new ColorAdapter(mContext,colors);          // Set the adapter for RecyclerView         mRecyclerView.setAdapter(mAdapter);    } } 
ColorAdapter.java
 package com.cfsuman.me.androidcode;  import android.content.Context; import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import java.util.Random;   public class ColorAdapter extends RecyclerView.Adapter<ColorAdapter.ViewHolder>{     private String[] mDataSet;     private Context mContext;     private Random mRandom = new Random();      public ColorAdapter(Context context,String[] DataSet){         mDataSet = DataSet;         mContext = context;     }      public static class ViewHolder extends RecyclerView.ViewHolder{         public TextView mTextView;         public ViewHolder(View v){             super(v);             mTextView = (TextView)v.findViewById(R.id.tv);         }     }      @Override     public ColorAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){         // Create a new View         View v = LayoutInflater.from(mContext).inflate(R.layout.custom_view,parent,false);         ViewHolder vh = new ViewHolder(v);         return vh;     }      @Override     public void onBindViewHolder(ViewHolder holder, int position){         holder.mTextView.setText(mDataSet[position]);         // Set a random height for TextView         holder.mTextView.getLayoutParams().height = getRandomIntInRange(250,75);         // Set a random color for TextView background         holder.mTextView.setBackgroundColor(getRandomHSVColor());     }      @Override     public int getItemCount(){         return mDataSet.length;     }      // Custom method to get a random number between a range     protected int getRandomIntInRange(int max, int min){         return mRandom.nextInt((max-min)+min)+min;     }      // Custom method to generate random HSV color     protected int getRandomHSVColor(){         // Generate a random hue value between 0 to 360         int hue = mRandom.nextInt(361);         // We make the color depth full         float saturation = 1.0f;         // We make a full bright color         float value = 1.0f;         // We avoid color transparency         int alpha = 255;         // Finally, generate the color         int color = Color.HSVToColor(alpha, new float[]{hue, saturation, value});         // Return the color         return color;     } } 
build.gradle [dependencies]
 compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.android.support:cardview-v7:23.0.1' 

Komentar