Skip to main content

Sticky Header Smooth Recycler view in Android

> Here is the example of Sticky Header view in recycler view with smooth scroll

> Sticky header is a View over recycler view that will Stick on header of recycler view and shows some information

> In this example i have filtered out the alphabets that will stick on header of recycler view.

> Follow the following Steps to make a Recycler View with Sticky Header.

<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:clipToPadding="true"
android:saveEnabled="false" />
</RelativeLayout>
import android.content.Context;
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.ArrayList;
public class Adapter extends RecyclerView.Adapter<Adapter.Holder> {
Context mContext;
ArrayList<String> mArrayListString;
public Adapter(Context mContext, ArrayList<String> mArrayListString) {
this.mContext = mContext;
this.mArrayListString = mArrayListString;
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.view_item, parent, false);
return new Holder(view);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
holder.mTextView.setText(mArrayListString.get(position));
}
@Override
public int getItemCount() {
return mArrayListString.size();
}
public class Holder extends RecyclerView.ViewHolder {
private final TextView mTextView;
public Holder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.tv_item);
}
}
}
view raw Adapter.java hosted with ❤ by GitHub
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="animals">
<item>Abyssinian</item>
<item>Adelie Penguin</item>
<item>Affenpinscher</item>
<item>Afghan Hound</item>
<item>African Bush Elephant</item>
<item>African Civet</item>
<item>African Clawed Frog</item>
<item>African Forest Elephant</item>
<item>African Palm Civet</item>
<item>African Penguin</item>
<item>African Tree Toad</item>
<item>African Wild Dog</item>
<item>Ainu Dog</item>
<item>Airedale Terrier</item>
<item>Akbash</item>
<item>Akita</item>
<item>Alaskan Malamute</item>
<item>Albatross</item>
<item>Aldabra Giant Tortoise</item>
<item>Alligator</item>
<item>Alpine Dachsbracke</item>
<item>American Bulldog</item>
<item>American Cocker Spaniel</item>
<item>American Coonhound</item>
<item>American Eskimo Dog</item>
<item>American Foxhound</item>
<item>American Pit Bull Terrier</item>
<item>American Staffordshire Terrier</item>
<item>American Water Spaniel</item>
<item>Anatolian Shepherd Dog</item>
<item>Angelfish</item>
<item>Ant</item>
<item>Anteater</item>
<item>Antelope</item>
<item>Appenzeller Dog</item>
<item>Arctic Fox</item>
<item>Arctic Hare</item>
<item>Arctic Wolf</item>
<item>Armadillo</item>
<item>Asian Elephant</item>
<item>Asian Giant Hornet</item>
<item>Asian Palm Civet</item>
<item>Asiatic Black Bear</item>
<item>Australian Cattle Dog</item>
<item>Australian Kelpie Dog</item>
<item>Australian Mist</item>
<item>Australian Shepherd</item>
<item>Australian Terrier</item>
<item>Avocet</item>
<item>Axolotl</item>
<item>Aye Aye</item>
<item>Baboon</item>
<item>Bactrian Camel</item>
<item>Badger</item>
<item>Balinese</item>
<item>Banded Palm Civet</item>
<item>Bandicoot</item>
<item>Barb</item>
<item>Barn Owl</item>
<item>Barnacle</item>
<item>Barracuda</item>
<item>Basenji Dog</item>
<item>Basking Shark</item>
<item>Basset Hound</item>
<item>Bat</item>
<item>Bavarian Mountain Hound</item>
<item>Beagle</item>
<item>Bear</item>
<item>Bearded Collie</item>
<item>Bearded Dragon</item>
<item>Beaver</item>
<item>Bedlington Terrier</item>
<item>Beetle</item>
<item>Bengal Tiger</item>
<item>Bernese Mountain Dog</item>
<item>Bichon Frise</item>
<item>Binturong</item>
<item>Bird</item>
<item>Birds Of Paradise</item>
<item>Birman</item>
<item>Bison</item>
<item>Black Bear</item>
<item>Black Rhinoceros</item>
<item>Black Russian Terrier</item>
<item>Black Widow Spider</item>
<item>Bloodhound</item>
<item>Blue Lacy Dog</item>
<item>Blue Whale</item>
<item>Bluetick Coonhound</item>
<item>Bobcat</item>
<item>Bolognese Dog</item>
<item>Bombay</item>
<item>Bongo</item>
<item>Bonobo</item>
<item>Booby</item>
<item>Border Collie</item>
<item>Border Terrier</item>
<item>Bornean Orang-utan</item>
<item>Borneo Elephant</item>
<item>Boston Terrier</item>
<item>Bottle Nosed Dolphin</item>
<item>Boxer Dog</item>
<item>Boykin Spaniel</item>
<item>Brazilian Terrier</item>
<item>Brown Bear</item>
<item>Budgerigar</item>
<item>Buffalo</item>
<item>Bull Mastiff</item>
<item>Bull Shark</item>
<item>Bull Terrier</item>
<item>Bulldog</item>
<item>Bullfrog</item>
<item>Bumble Bee</item>
<item>Burmese</item>
<item>Burrowing Frog</item>
<item>Butterfly</item>
<item>Butterfly Fish</item>
<item>Caiman</item>
<item>Caiman Lizard</item>
<item>Cairn Terrier</item>
<item>Camel</item>
<item>Canaan Dog</item>
<item>Capybara</item>
<item>Caracal</item>
<item>Carolina Dog</item>
<item>Cassowary</item>
<item>Cat</item>
<item>Caterpillar</item>
<item>Catfish</item>
<item>Cavalier King Charles Spaniel</item>
<item>Centipede</item>
<item>Cesky Fousek</item>
<item>Chameleon</item>
<item>Chamois</item>
<item>Cheetah</item>
<item>Chesapeake Bay Retriever</item>
<item>Chicken</item>
<item>Chihuahua</item>
<item>Chimpanzee</item>
<item>Chinchilla</item>
<item>Chinese Crested Dog</item>
<item>Chinook</item>
<item>Chinstrap Penguin</item>
<item>Chipmunk</item>
<item>Chow Chow</item>
<item>Cichlid</item>
<item>Clouded Leopard</item>
<item>Clown Fish</item>
<item>Clumber Spaniel</item>
<item>Coati</item>
<item>Cockroach</item>
<item>Collared Peccary</item>
<item>Collie</item>
<item>Common Buzzard</item>
<item>Common Frog</item>
<item>Common Loon</item>
<item>Common Toad</item>
<item>Coral</item>
<item>Cottontop Tamarin</item>
<item>Cougar</item>
<item>Cow</item>
<item>Coyote</item>
<item>Crab</item>
<item>Crab-Eating Macaque</item>
<item>Crane</item>
<item>Crested Penguin</item>
<item>Crocodile</item>
<item>Cross River Gorilla</item>
<item>Curly Coated Retriever</item>
<item>Cuscus</item>
<item>Cuttlefish</item>
<item>Dachshund</item>
<item>Dalmatian</item>
<item>Darwin\'s Frog</item>
<item>Deer</item>
<item>Desert Tortoise</item>
<item>Deutsche Bracke</item>
<item>Dhole</item>
<item>Dingo</item>
<item>Discus</item>
<item>Doberman Pinscher</item>
<item>Dodo</item>
<item>Dog</item>
<item>Dogo Argentino</item>
<item>Dogue De Bordeaux</item>
<item>Dolphin</item>
<item>Donkey</item>
<item>Dormouse</item>
<item>Dragonfly</item>
<item>Drever</item>
<item>Duck</item>
<item>Dugong</item>
<item>Dunker</item>
<item>Dusky Dolphin</item>
<item>Dwarf Crocodile</item>
<item>Eagle</item>
<item>Earwig</item>
<item>Eastern Gorilla</item>
<item>Eastern Lowland Gorilla</item>
<item>Echidna</item>
<item>Edible Frog</item>
<item>Egyptian Mau</item>
<item>Electric Eel</item>
<item>Elephant</item>
<item>Elephant Seal</item>
<item>Elephant Shrew</item>
<item>Emperor Penguin</item>
<item>Emperor Tamarin</item>
<item>Emu</item>
<item>English Cocker Spaniel</item>
<item>English Shepherd</item>
<item>English Springer Spaniel</item>
<item>Entlebucher Mountain Dog</item>
<item>Epagneul Pont Audemer</item>
<item>Eskimo Dog</item>
<item>Estrela Mountain Dog</item>
<item>Falcon</item>
<item>Fennec Fox</item>
<item>Ferret</item>
<item>Field Spaniel</item>
<item>Fin Whale</item>
<item>Finnish Spitz</item>
<item>Fire-Bellied Toad</item>
<item>Fish</item>
<item>Fishing Cat</item>
<item>Flamingo</item>
<item>Flat Coat Retriever</item>
<item>Flounder</item>
<item>Fly</item>
<item>Flying Squirrel</item>
<item>Fossa</item>
<item>Fox</item>
<item>Fox Terrier</item>
<item>French Bulldog</item>
<item>Frigatebird</item>
<item>Frilled Lizard</item>
<item>Frog</item>
<item>Fur Seal</item>
<item>Galapagos Penguin</item>
<item>Galapagos Tortoise</item>
<item>Gar</item>
<item>Gecko</item>
<item>Gentoo Penguin</item>
<item>Geoffroys Tamarin</item>
<item>Gerbil</item>
<item>German Pinscher</item>
<item>German Shepherd</item>
<item>Gharial</item>
<item>Giant African Land Snail</item>
<item>Giant Clam</item>
<item>Giant Panda Bear</item>
<item>Giant Schnauzer</item>
<item>Gibbon</item>
<item>Gila Monster</item>
<item>Giraffe</item>
<item>Glass Lizard</item>
<item>Glow Worm</item>
<item>Goat</item>
<item>Golden Lion Tamarin</item>
<item>Golden Oriole</item>
<item>Golden Retriever</item>
<item>Goose</item>
<item>Gopher</item>
<item>Gorilla</item>
<item>Grasshopper</item>
<item>Great Dane</item>
<item>Great White Shark</item>
<item>Greater Swiss Mountain Dog</item>
<item>Green Bee-Eater</item>
<item>Greenland Dog</item>
<item>Grey Mouse Lemur</item>
<item>Grey Reef Shark</item>
<item>Grey Seal</item>
<item>Greyhound</item>
<item>Grizzly Bear</item>
<item>Grouse</item>
<item>Guinea Fowl</item>
<item>Guinea Pig</item>
<item>Guppy</item>
<item>Hammerhead Shark</item>
<item>Hamster</item>
<item>Hare</item>
<item>Harrier</item>
<item>Havanese</item>
<item>Hedgehog</item>
<item>Hercules Beetle</item>
<item>Hermit Crab</item>
<item>Heron</item>
<item>Highland Cattle</item>
<item>Himalayan</item>
<item>Hippopotamus</item>
<item>Honey Bee</item>
<item>Horn Shark</item>
<item>Horned Frog</item>
<item>Horse</item>
<item>Horseshoe Crab</item>
<item>Howler Monkey</item>
<item>Human</item>
<item>Humboldt Penguin</item>
<item>Hummingbird</item>
<item>Humpback Whale</item>
<item>Hyena</item>
<item>Ibis</item>
<item>Ibizan Hound</item>
<item>Iguana</item>
<item>Impala</item>
<item>Indian Elephant</item>
<item>Indian Palm Squirrel</item>
<item>Indian Rhinoceros</item>
<item>Indian Star Tortoise</item>
<item>Indochinese Tiger</item>
<item>Indri</item>
<item>Insect</item>
<item>Irish Setter</item>
<item>Irish WolfHound</item>
<item>Jack Russel</item>
<item>Jackal</item>
<item>Jaguar</item>
<item>Japanese Chin</item>
<item>Japanese Macaque</item>
<item>Javan Rhinoceros</item>
<item>Javanese</item>
<item>Jellyfish</item>
<item>Kakapo</item>
<item>Kangaroo</item>
<item>Keel Billed Toucan</item>
<item>Killer Whale</item>
<item>King Crab</item>
<item>King Penguin</item>
<item>Kingfisher</item>
<item>Kiwi</item>
<item>Koala</item>
<item>Komodo Dragon</item>
<item>Kudu</item>
<item>Labradoodle</item>
<item>Labrador Retriever</item>
<item>Ladybird</item>
<item>Leaf-Tailed Gecko</item>
<item>Lemming</item>
<item>Lemur</item>
<item>Leopard</item>
<item>Leopard Cat</item>
<item>Leopard Seal</item>
<item>Leopard Tortoise</item>
<item>Liger</item>
<item>Lion</item>
<item>Lionfish</item>
<item>Little Penguin</item>
<item>Lizard</item>
<item>Llama</item>
<item>Lobster</item>
<item>Long-Eared Owl</item>
<item>Lynx</item>
<item>Macaroni Penguin</item>
<item>Macaw</item>
<item>Magellanic Penguin</item>
<item>Magpie</item>
<item>Maine Coon</item>
<item>Malayan Civet</item>
<item>Malayan Tiger</item>
<item>Maltese</item>
<item>Manatee</item>
<item>Mandrill</item>
<item>Manta Ray</item>
<item>Marine Toad</item>
<item>Markhor</item>
<item>Marsh Frog</item>
<item>Masked Palm Civet</item>
<item>Mastiff</item>
<item>Mayfly</item>
<item>Meerkat</item>
<item>Millipede</item>
<item>Minke Whale</item>
<item>Mole</item>
<item>Molly</item>
<item>Mongoose</item>
<item>Mongrel</item>
<item>Monitor Lizard</item>
<item>Monkey</item>
<item>Monte Iberia Eleuth</item>
<item>Moorhen</item>
<item>Moose</item>
<item>Moray Eel</item>
<item>Moth</item>
<item>Mountain Gorilla</item>
<item>Mountain Lion</item>
<item>Mouse</item>
<item>Mule</item>
<item>Neanderthal</item>
<item>Neapolitan Mastiff</item>
<item>Newfoundland</item>
<item>Newt</item>
<item>Nightingale</item>
<item>Norfolk Terrier</item>
<item>Norwegian Forest</item>
<item>Numbat</item>
<item>Nurse Shark</item>
<item>Ocelot</item>
<item>Octopus</item>
<item>Okapi</item>
<item>Old English Sheepdog</item>
<item>Olm</item>
<item>Opossum</item>
<item>Orang-utan</item>
<item>Ostrich</item>
<item>Otter</item>
<item>Oyster</item>
<item>Pademelon</item>
<item>Panther</item>
<item>Parrot</item>
<item>Patas Monkey</item>
<item>Peacock</item>
<item>Pekingese</item>
<item>Pelican</item>
<item>Penguin</item>
<item>Persian</item>
<item>Pheasant</item>
<item>Pied Tamarin</item>
<item>Pig</item>
<item>Pika</item>
<item>Pike</item>
<item>Pink Fairy Armadillo</item>
<item>Piranha</item>
<item>Platypus</item>
<item>Pointer</item>
<item>Poison Dart Frog</item>
<item>Polar Bear</item>
<item>Pond Skater</item>
<item>Poodle</item>
<item>Pool Frog</item>
<item>Porcupine</item>
<item>Possum</item>
<item>Prawn</item>
<item>Proboscis Monkey</item>
<item>Puffer Fish</item>
<item>Puffin</item>
<item>Pug</item>
<item>Puma</item>
<item>Purple Emperor</item>
<item>Puss Moth</item>
<item>Pygmy Hippopotamus</item>
<item>Pygmy Marmoset</item>
<item>Quail</item>
<item>Quetzal</item>
<item>Quokka</item>
<item>Quoll</item>
<item>Rabbit</item>
<item>Raccoon</item>
<item>Raccoon Dog</item>
<item>Radiated Tortoise</item>
<item>Ragdoll</item>
<item>Rat</item>
<item>Rattlesnake</item>
<item>Red Knee Tarantula</item>
<item>Red Panda</item>
<item>Red Wolf</item>
<item>Red-handed Tamarin</item>
<item>Reindeer</item>
<item>Rhinoceros</item>
<item>River Dolphin</item>
<item>River Turtle</item>
<item>Robin</item>
<item>Rock Hyrax</item>
<item>Rockhopper Penguin</item>
<item>Roseate Spoonbill</item>
<item>Rottweiler</item>
<item>Royal Penguin</item>
<item>Russian Blue</item>
<item>Sabre-Toothed Tiger</item>
<item>Saint Bernard</item>
<item>Salamander</item>
<item>Sand Lizard</item>
<item>Saola</item>
<item>Scorpion</item>
<item>Scorpion Fish</item>
<item>Sea Dragon</item>
<item>Sea Lion</item>
<item>Sea Otter</item>
<item>Sea Slug</item>
<item>Sea Squirt</item>
<item>Sea Turtle</item>
<item>Sea Urchin</item>
<item>Seahorse</item>
<item>Seal</item>
<item>Serval</item>
<item>Sheep</item>
<item>Shih Tzu</item>
<item>Shrimp</item>
<item>Siamese</item>
<item>Siamese Fighting Fish</item>
<item>Siberian</item>
<item>Siberian Husky</item>
<item>Siberian Tiger</item>
<item>Silver Dollar</item>
<item>Skunk</item>
<item>Sloth</item>
<item>Slow Worm</item>
<item>Snail</item>
<item>Snake</item>
<item>Snapping Turtle</item>
<item>Snowshoe</item>
<item>Snowy Owl</item>
<item>Somali</item>
<item>South China Tiger</item>
<item>Spadefoot Toad</item>
<item>Sparrow</item>
<item>Spectacled Bear</item>
<item>Sperm Whale</item>
<item>Spider Monkey</item>
<item>Spiny Dogfish</item>
<item>Sponge</item>
<item>Squid</item>
<item>Squirrel</item>
<item>Squirrel Monkey</item>
<item>Sri Lankan Elephant</item>
<item>Staffordshire Bull Terrier</item>
<item>Stag Beetle</item>
<item>Starfish</item>
<item>Stellers Sea Cow</item>
<item>Stick Insect</item>
<item>Stingray</item>
<item>Stoat</item>
<item>Striped Rocket Frog</item>
<item>Sumatran Elephant</item>
<item>Sumatran Orang-utan</item>
<item>Sumatran Rhinoceros</item>
<item>Sumatran Tiger</item>
<item>Sun Bear</item>
<item>Swan</item>
<item>Tang</item>
<item>Tapir</item>
<item>Tarsier</item>
<item>Tasmanian Devil</item>
<item>Tawny Owl</item>
<item>Termite</item>
<item>Tetra</item>
<item>Thorny Devil</item>
<item>Tibetan Mastiff</item>
<item>Tiffany</item>
<item>Tiger</item>
<item>Tiger Salamander</item>
<item>Tiger Shark</item>
<item>Tortoise</item>
<item>Toucan</item>
<item>Tree Frog</item>
<item>Tropicbird</item>
<item>Tuatara</item>
<item>Turkey</item>
<item>Turkish Angora</item>
<item>Uakari</item>
<item>Uguisu</item>
<item>Umbrellabird</item>
<item>Vampire Bat</item>
<item>Vervet Monkey</item>
<item>Vulture</item>
<item>Wallaby</item>
<item>Walrus</item>
<item>Warthog</item>
<item>Wasp</item>
<item>Water Buffalo</item>
<item>Water Dragon</item>
<item>Water Vole</item>
<item>Weasel</item>
<item>Welsh Corgi</item>
<item>West Highland Terrier</item>
<item>Western Gorilla</item>
<item>Western Lowland Gorilla</item>
<item>Whale Shark</item>
<item>Whippet</item>
<item>White Faced Capuchin</item>
<item>White Rhinoceros</item>
<item>White Tiger</item>
<item>Wild Boar</item>
<item>Wildebeest</item>
<item>Wolf</item>
<item>Wolverine</item>
<item>Wombat</item>
<item>Woodlouse</item>
<item>Woodpecker</item>
<item>Woolly Mammoth</item>
<item>Woolly Monkey</item>
<item>Wrasse</item>
<item>X-Ray Tetra</item>
<item>Yak</item>
<item>Yellow-Eyed Penguin</item>
<item>Yorkshire Terrier</item>
<item>Zebra</item>
<item>Zebra Shark</item>
<item>Zebu</item>
<item>Zonkey</item>
<item>Zorse</item>
</string-array>
</resources>
view raw arrays.xml hosted with ❤ by GitHub
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="header">30dp</dimen>
</resources>
view raw dimens.xml hosted with ❤ by GitHub
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new Adapter(this,getData());
mRecyclerView.setAdapter(adapter);
RecyclerSectionItemDecoration sectionItemDecoration =
new RecyclerSectionItemDecoration(getResources().getDimensionPixelSize(R.dimen.header),
true,
getSectionCallback(getData()));
mRecyclerView.addItemDecoration(sectionItemDecoration);
}
public ArrayList<String> getData() {
String[] strings = getResources().getStringArray(R.array.animals);
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strings));
return list;
}
private RecyclerSectionItemDecoration.SectionCallback getSectionCallback(final List<String> people) {
return new RecyclerSectionItemDecoration.SectionCallback() {
@Override
public boolean isSection(int position) {
return position == 0
|| people.get(position)
.charAt(0) != people.get(position - 1)
.charAt(0);
}
@Override
public CharSequence getSectionHeader(int position) {
return people.get(position)
.subSequence(0,
1);
}
};
}
}
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class RecyclerSectionItemDecoration extends RecyclerView.ItemDecoration {
private final int headerOffset;
private final boolean sticky;
private final SectionCallback sectionCallback;
private View headerView;
private TextView header;
public RecyclerSectionItemDecoration(int headerHeight, boolean sticky, @NonNull SectionCallback sectionCallback) {
headerOffset = headerHeight;
this.sticky = sticky;
this.sectionCallback = sectionCallback;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int pos = parent.getChildAdapterPosition(view);
if (sectionCallback.isSection(pos)) {
outRect.top = headerOffset;
}
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(c, parent, state);
if (headerView == null) {
headerView = inflateHeaderView(parent);
header = (TextView) headerView.findViewById(R.id.tv_header);
fixLayoutSize(headerView, parent);
}
CharSequence previousHeader = "";
for (int i = 0; i < parent.getChildCount(); i++) {
View child = parent.getChildAt(i);
final int position = parent.getChildAdapterPosition(child);
CharSequence title = sectionCallback.getSectionHeader(position);
header.setText(title);
if (!previousHeader.equals(title) || sectionCallback.isSection(position)) {
drawHeader(c, child, headerView);
previousHeader = title;
}
}
}
private void drawHeader(Canvas c, View child, View headerView) {
c.save();
if (sticky) {
c.translate(0, Math.max(0, child.getTop() - headerView.getHeight()));
} else {
c.translate(0, child.getTop() - headerView.getHeight());
}
headerView.draw(c);
c.restore();
}
private View inflateHeaderView(RecyclerView parent) {
return LayoutInflater.from(parent.getContext())
.inflate(R.layout.view_header, parent, false);
}
private void fixLayoutSize(View view, ViewGroup parent) {
int widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(),
View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(),
View.MeasureSpec.UNSPECIFIED);
int childWidth = ViewGroup.getChildMeasureSpec(widthSpec,
parent.getPaddingLeft() + parent.getPaddingRight(),
view.getLayoutParams().width);
int childHeight = ViewGroup.getChildMeasureSpec(heightSpec,
parent.getPaddingTop() + parent.getPaddingBottom(),
view.getLayoutParams().height);
view.measure(childWidth, childHeight);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
}
public interface SectionCallback {
boolean isSection(int position);
CharSequence getSectionHeader(int position);
}
}
<?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="wrap_content"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/tv_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="horizontal"
android:padding="10dp"
android:text="Hardik Lakhani"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
view raw view_header.xml hosted with ❤ by GitHub
<?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="wrap_content"
android:background="@color/colorAccent">
<TextView
android:id="@+id/tv_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="horizontal"
android:padding="10dp"
android:text="Hardik Lakhani"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
view raw view_item.xml hosted with ❤ by GitHub


> Here arrays.xml contains some dummy names so we can show up a demo.

> Run this application and see the sticky header in your screen.

> You can see the output in following video



Comments

  1. This tutorial is awesome. Very clear and easy to understand. Thanks a lot!

    ReplyDelete
  2. if we get or set header title of more than a one character return from getSectionheader method of the activity class then header will set text of all item name on header . it's looking weird or not good .there is and issue .so how can i overcome that issue. can you help me to resolve that. i have elaborate more thing as following. just change the below method as following. if i only want to keep or set header title more than one character or as first item of the list that set as a header title.how can achieve this.thanks.

    @Override
    public CharSequence getSectionHeader(int position) {

    String s1= pepole.get(position).getlastname();

    return people.get(position)
    .subSequence(0,s1.length);
    }

    ReplyDelete
  3. Can we make only footer sticky?

    ReplyDelete
  4. diffirent size of people, make increase or decrease space on recycler list automatically. how to solve it? thankyou

    ReplyDelete
  5. I really appreciate your work which you have shared here about the recyclerview. The article you have shared here is very informative and the points you have mentioned are very helpful. Thank you so much. recyclerview in kotlin

    ReplyDelete

Post a Comment

Popular posts from this blog

Tri-States | Indeterminate Checkbox Android

Sometimes it is required to implement checkbox with 3 states Unchecked Checked Indeterminate So here is a simple example of how to implement Tri-States or you can say Indeterminate Checkbox Android First of all, make a custom class which is extend Checkbox import android.content.Context import android.util.AttributeSet import androidx.appcompat.widget.AppCompatCheckBox import com.android.tristatescheckbox.R class TriStatesCheckBox : AppCompatCheckBox { private var state = 0 constructor ( context: Context ?) : super ( context ) { init () } constructor ( context: Context ?, attrs: AttributeSet ?) : super ( context , attrs ) { init () } constructor ( context: Context ?, attrs: AttributeSet ?, defStyleAttr: Int ) : super ( context , attrs , defStyleAttr ) { init () } private fun init () { state = UNCHECKED...

HORIZONTAL FLIP ANIMATION: VIEW PAGER TRANSFORMATION ANIMATION ANDROID

Here I am sharing you a View Pager Transformation Animation Class By Which you can give a transformation animation to you view Pager First of all, create a simple view pager example. If you don't know how to create an example for simple view pager then click below link for creating simple view pager example in android Simple View Pager Example in Android Copy below class and Paste into your project Set Page Transformer to your view pager like below viewpager.setPageTransformer(true, new HorizontalFlip Transformation ()); That's It you're done.

FADE OUT ANIMATION: VIEW PAGER TRANSFORMATION ANIMATION ANDROID

Here I am sharing you a View Pager Transformation Animation Class By Which you can give a transformation animation to you view Pager First of all, create a simple view pager example. If you don't know how to create an example for simple view pager then click below link for creating simple view pager example in android Simple View Pager Example in Android Copy below class and Paste into your project Set Page Transformer to your view pager like below viewpager.setPageTransformer(true, new FadeOutTransformation()); That's It you're done. Enjoy