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)
Demos
Samples
Getting started
In your build.gradle:
repositories {
jcenter()
}
dependencies {
compile 'com.nshmura:recyclertablayout:1.5.0'
}
Define RecyclerTabLayout in xml layout with custom attributes.
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 {
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);
...
}
}
}
Attributes
attr
description
rtl_tabIndicatorColor
Indicator color
rtl_tabIndicatorHeight
Indicator height
rtl_tabBackground
Background drawable of each tab
rtl_tabTextAppearance
TextAppearence of each tab
rtl_tabSelectedTextColor
Text color of selected tab
rtl_tabOnScreenLimit
The number of OnScreen tabs. If this value is larger than 0, rtl_tabMinWidth and rtl_tabMaxWidth are ignored.
rtl_tabMinWidth
Minimum width of each tab
rtl_tabMaxWidth
Maximum width of each tab
rtl_tabPaddingStart
The padding of the start edge of each tab
rtl_tabPaddingTop
The padding of the top edge of each tab
rtl_tabPaddingEnd
The padding of the end edge of each tab
rtl_tabPaddingBottom
The padding of the bottom edge of each tab
rtl_tabPadding
The padding of all four edges of each tab
rtl_scrollEnabled
Sets whether tab scrolling is enabled
Thanks
The demo app uses the following resources.
License
Copyright (C) 2017 nshmura
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.