How to increase icon size of tabs in TabLayout
Hi I faced the same problem before and this is the best solution I could find:
You should use (setCustomView), first of all make a new layout file lets name it (customtab.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:id="@+id/icon"
android:layout_gravity="center_horizontal" />
</LinearLayout>
Then and for each tab do this: (use the same layout .xml)
View view1 = getLayoutInflater().inflate(R.layout.customtab, null);
view1.findViewById(R.id.icon).setBackgroundResource(R.drawable.my1);
tabLayout.addTab(tabLayout.newTab().setCustomView(view1));
View view2 = getLayoutInflater().inflate(R.layout.customtab, null);
view2.findViewById(R.id.icon).setBackgroundResource(R.drawable.my2);
tabLayout.addTab(tabLayout.newTab().setCustomView(view2));
View view3 = getLayoutInflater().inflate(R.layout.customtab, null);
view3.findViewById(R.id.icon).setBackgroundResource(R.drawable.my3);
tabLayout.addTab(tabLayout.newTab().setCustomView(view3));
...
OR in a similar way
public static final int[] tabIcon = {R.drawable.icon_one, R.drawable.icon_two, R.drawable.icon_three};
private void setCustomTabs() {
for (int i = 0; i < tabIcon.length; i++) {
View view = getLayoutInflater().inflate(R.layout.customtab,null);
TabLayout.Tab tab = tabLayout.getTabAt(i);
view.findViewById(R.id.icon).setBackgroundResource(tabIcon[i]);
if(tab!=null) tab.setCustomView(view);
}
}
As stated in the documentation, you can create a new layout with an ImageView
with android:id="@android:id/icon"
and set it as the custom view for the tab. The TabLayout will automatically place the icon in the inner ImageView with android:id/icon
Then in you code you can call the setIcon(R.drawable.yourIcon)
while you create the tab.
Then you can apply you custom layout within a for loop :
mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.searchpin));
mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.discussionpin));
mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.userpin));
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab != null) tab.setCustomView(R.layout.view_home_tab);
}
Here is the xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@android:id/icon"
android:layout_width="@dimen/tab_icon_size"
android:layout_height="@dimen/tab_icon_size"
android:layout_centerInParent="true"/>
</RelativeLayout>