In this blog, we are going to create a recycler view layout with the latest UI layout method which means we have a standard recycler view that includes one image, one title, and one description.
1st, we have to change the color system in the string.xml file.
<color name="purple_200">#024265</color>
<color name="purple_500">#024265</color>
<color name="purple_700">#024265</color>
<color name="teal_200">#e6ebef</color>
<color name="teal_700">#e6ebef</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
2nd, we have to create a Shimmer Effect Dependency layout which is shown in recycler view items.
// Shimmer Effect Dependency
implementation("com.facebook.shimmer:shimmer:0.5.0")
3rd, we have to create a card.bg.xml layout which is shown in recycler view items.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="2dp"
android:color="@color/purple_200" />
<solid android:color="@color/teal_200" />
<corners android:radius="2dp" />
</shape>
4th, we have to create an arrow_right.xml icon code for the description which is shown in recycler view items.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="@color/purple_200"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M10,17l5,-5 -5,-5v10z" />
</vector>
5th, we have to create a model_layout.xml layout which is shown in recycler view items.
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="2dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/card_bg">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:orientation="horizontal"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="70dp"
android:background="@color/purple_200"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="85dp"
android:layout_height="match_parent"
android:background="#ABF8EE"
android:layout_margin="2dp"
android:gravity="center"
android:padding="14dp">
<ImageView
android:id="@+id/modelImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
android:src="@drawable/icon" />
</RelativeLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginStart="1.5dp"
android:background="@color/teal_200" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginStart="1.5dp"
android:background="@color/teal_200" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginStart="1.5dp"
android:background="@color/teal_200" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginStart="1.5dp"
android:background="@color/teal_200" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/modelTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:fontFamily="@font/alata"
android:text="Bank Name Space"
android:textColor="@color/purple_200"
android:textSize="20sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-6dp"
android:orientation="horizontal">
<View
android:layout_width="4dp"
android:layout_height="10dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="1dp"
android:layout_marginTop="1dp"
android:background="@color/purple_200" />
<View
android:layout_width="12dp"
android:layout_height="18dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="-4.5dp"
android:layout_marginTop="1dp"
android:background="@drawable/arrow_right" />
<TextView
android:id="@+id/modelTxtDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="-2dp"
android:fontFamily="@font/alatsi"
android:text="Description Details"
android:textColor="@color/purple_200"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
</androidx.cardview.widget.CardView>

6th, create a search.xml layout code that helps to find recycler view items.
7th, create a menu item which is given below.
first_action_bar menu system:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:icon="@drawable/search"
android:title="Search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
</menu>
second_action_bar menu system:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/youtube"
android:icon="@drawable/video_logo"
android:title="YouTube"
app:showAsAction="ifRoom" />
</menu>
8th, we have to create a custom toolbar layout that helps to show the app title name and search button which is the most important past of the recycler view layout.
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/purple_200">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_margin="8dp"
android:background="@color/teal_200"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/alatsi"
android:shadowColor="@color/black"
android:shadowDx="1.5"
android:shadowDy="1.3"
android:shadowRadius="1.6"
android:text="@string/app_name"
android:textColor="@color/teal_200"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

9th, we have to create a recycler view layout with the under-constraint layout.
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/teal_200"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/teal_200"
android:paddingLeft="12dp"
android:paddingRight="12dp"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout2"
app:layout_constraintEnd_toEndOf="@+id/constraintLayout2"
app:layout_constraintStart_toStartOf="@+id/constraintLayout2"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/model_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>

10th, we have to create an ItemClickListener.java file which can help to show the recycler view click event system.
import android.view.View;
public interface ItemClickListener {
void onItemClick(View view, int position);
}
11th, we have to create a Model.java file that can help to show the recycler view layout event system.
public class Model {
private String title, disc;
private int img;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDisc() {
return disc;
}
public void setDisc(String disc) {
this.disc = disc;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}
12th, we have to create a Holder.java file that can help to show the recycler view layout event system.
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.facebook.shimmer.ShimmerFrameLayout;
public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imageView;
TextView textView, disc;
private ItemClickListener itemClickListener;
ShimmerFrameLayout shimmerFrameLayout;
public Holder(@NonNull View itemView) {
super(itemView);
this.imageView = itemView.findViewById(R.id.modelImg);
this.textView = itemView.findViewById(R.id.modelTxt);
this.disc = itemView.findViewById(R.id.modelTxtDesc);
this.shimmerFrameLayout = itemView.findViewById(R.id.shimmerLayout);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
this.itemClickListener.onItemClick(v, getLayoutPosition());
}
void setItemClickListener(ItemClickListener listener) {
this.itemClickListener = listener;
}
}
13th, we have to create an Adapter.java file that can help to show the recycler view item click event system.
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class Adapter extends RecyclerView.Adapter<Holder> implements Filterable {
Context c;
private final ArrayList<Model> models;
private final ArrayList<Model> modelItemFull;
boolean showShimmer = true;
public Adapter(Context c, ArrayList<Model> models) {
this.c = c;
this.models = models;
this.modelItemFull = new ArrayList<>(models);
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.model_layout, null);
return new Holder(view);
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
if (showShimmer) {
holder.shimmerFrameLayout.startShimmer();
} else {
holder.shimmerFrameLayout.stopShimmer();
holder.shimmerFrameLayout.setShimmer(null);
holder.imageView.setImageResource(models.get(position).getImg());
holder.textView.setText(models.get(position).getTitle());
holder.disc.setText(models.get(position).getDisc());
holder.setItemClickListener((view, position1) -> {
if ("Indian & Allahabad Bank".equals(models.get(position1).getTitle())) {
// Intent sampleApps = new Intent(c, IndianBank.class);
// c.startActivity(sampleApps);
}
if ("Andhra & Union Bank".equals(models.get(position1).getTitle())) {
// Intent sampleApps = new Intent(c, AndhraBank.class);
// c.startActivity(sampleApps);
}
if ("Axis Bank Ltd.".equals(models.get(position1).getTitle())) {
// Intent sampleApps = new Intent(c, AxisBank.class);
// c.startActivity(sampleApps);
}
});
}
}
@Override
public int getItemCount() {
int SHIMMER_ITEM_NUMBER = 10;
return showShimmer ? SHIMMER_ITEM_NUMBER : models.size();
}
@Override
public Filter getFilter() {
return itemFilter;
}
public Filter itemFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Model> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(modelItemFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Model item : modelItemFull) {
if (item.getTitle().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
models.clear();
models.addAll((List) results.values);
notifyDataSetChanged();
}
};
}
14th, we have to create an icon file that can help to show the recycler view item image view layout system.
⭐
Rating: 1 out of 6.15th, we have to create a MainActivity.java file that can help to show the recycler view layout system.
private Adapter adapter;
Toolbar toolbar = findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
RecyclerView firstRecyclerView = findViewById(R.id.recyclerView);
firstRecyclerView.setLayoutManager(new GridLayoutManager(this, 1));
firstRecyclerView.setItemAnimator(new DefaultItemAnimator());
adapter = new Adapter(this, getModels());
firstRecyclerView.setAdapter(adapter);
new Handler().postDelayed(() -> {
getModels();
adapter.showShimmer = false;
adapter.notifyDataSetChanged();
}, 3000);
private ArrayList<Model> getModels() {
ArrayList<Model> models = new ArrayList<>();
Model click2code;
click2code = new Model();
click2code.setTitle("Indian & Allahabad Bank");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.indian);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Andhra & Union Bank");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.andhra);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Axis Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.axis);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Bandhan Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.bandhan);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Bank of Baroda");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.baroda);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Bank of India");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.boi);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Bank of Maharashtra");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.maharashtra);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Canara Bank");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.canara);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Catholic Syrian Bank");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.catholic);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Central Bank of India");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.cbi);
models.add(click2code);
click2code = new Model();
click2code.setTitle("City Union Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.cityunion);
models.add(click2code);
click2code = new Model();
click2code.setTitle("DCB Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.dcb);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Dhanlaxmi Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.dhanlaxmi);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Federal Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.federal);
models.add(click2code);
click2code = new Model();
click2code.setTitle("HDFC Bank Ltd");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.hdfc);
models.add(click2code);
click2code = new Model();
click2code.setTitle("ICICI Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.icici);
models.add(click2code);
click2code = new Model();
click2code.setTitle("IDBI Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.idbi);
models.add(click2code);
click2code = new Model();
click2code.setTitle("IDFC First Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.idfc);
models.add(click2code);
click2code = new Model();
click2code.setTitle("India Post Payments Bank");
click2code.setDisc("Payment Bank");
click2code.setImg(R.drawable.india_post);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Indian Overseas Bank");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.ios);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Induslnd Bank Ltd");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.indusind);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Jammu & Kashmir Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.jk);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Jharkhand Rajya Gramin Bank");
click2code.setDisc("Regional Rural Bank");
click2code.setImg(R.drawable.jrgb_bank);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Karnataka Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.karnataka);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Karur Vysya Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.karur);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Kotak Mahindra Bank Ltd");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.kotak);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Nainital Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.nainital);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Punjab National Bank");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.pnb);
models.add(click2code);
click2code = new Model();
click2code.setTitle("Punjab & Sind Bank");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.psb);
models.add(click2code);
click2code = new Model();
click2code.setTitle("RBL Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.rbl);
models.add(click2code);
click2code = new Model();
click2code.setTitle("State Bank of India");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.sbi);
models.add(click2code);
click2code = new Model();
click2code.setTitle("South Indian Bank Ltd.");
click2code.setDisc("Private Sector Bank");
click2code.setImg(R.drawable.southindian);
models.add(click2code);
click2code = new Model();
click2code.setTitle("UCO Bank");
click2code.setDisc("Public Sector Bank");
click2code.setImg(R.drawable.uco);
models.add(click2code);
return models;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.first_action_bar, menu);
MenuItem item = menu.findItem(R.id.search);
androidx.appcompat.widget.SearchView searchView = (androidx.appcompat.widget.SearchView) MenuItemCompat.getActionView(item);
searchView.setQueryHint("Type Any Bank Name...");
searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
return true;
}
::: Thank You :::