An efficient TabLayout library implemented with RecyclerView
RecyclerTabLayout
An efficient TabLayout library implemented with RecyclerView.
Features
- Efficient when having many tabs
- Easy setup with ViewPager (same as TabLayout of Android Design Support Library)
- RTL layout support
UseCase
- Many tabs layout
- Infinite loop scrolling (imitated)
Live Demo
https://play.google.com/store/apps/details?id=com.nshmura.recyclertablayout.demo
Getting started
In your build.gradle:
repositories {
jcenter()
}
dependencies {
compile 'com.nshmura:recyclertablayout:1.5.0'
}
Define RecyclerTabLayout
in xml layout with custom attributes.
<com.nshmura.recyclertablayout.RecyclerTabLayout
android:id="@+id/recycler_tab_layout"
android:layout_width="match_parent"
android:layout_height="48dp"
rtl_tabIndicatorColor="?attr/colorAccent"
rtl_tabIndicatorHeight="2dp"
rtl_tabBackground="?attr/selectableItemBackground"
rtl_tabTextAppearance="@android:style/TextAppearance.Small"
rtl_tabSelectedTextColor="?android:textColorPrimary"
rtl_tabMinWidth="72dp"
rtl_tabMaxWidth="264dp"
rtl_tabPaddingStart="12dp"
rtl_tabPaddingTop="0dp"
rtl_tabPaddingEnd="12dp"
rtl_tabPaddingBottom="0dp"
rtl_tabPadding="0dp"/>
Set up with the ViewPager.
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
RecyclerTabLayout recyclerTabLayout = (RecyclerTabLayout) findViewById(R.id.recycler_tab_layout);
recyclerTabLayout.setUpWithViewPager(viewPager);
Or set up with ViewPager and Custom RecyclerView.Adapter that's extends RecyclerTabLayout.Adapter
.
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
RecyclerTabLayout recyclerTabLayout = (RecyclerTabLayout) findViewById(R.id.recycler_tab_layout);
recyclerTabLayout.setUpWithAdapter(new CustomRecyclerViewAdapter(viewPager));
Here's sample of custom RecyclerView adapter.
public class CustomRecyclerViewAdapter extends RecyclerTabLayout.Adapter<CustomRecyclerViewAdapter.ViewHolder> {
public DemoCustomView01Adapter(ViewPager viewPager) {
super(viewPager);
...
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Inflate your view.
View view = ...;
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// Bind data
...
if (position == getCurrentIndicatorPosition()) {
//Highlight view
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public ViewHolder(View itemView) {
super(itemView);
...
}
}
}