Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to increase icon size of tabs in TabLayout

Tags:

android

I am trying to increase icon size of tabs in my app. Icon sizes are fixed tried out many ways but nothing is working, finally tried the following but no change in size.Please if any one can tell me the right way I will be glad.Thanks in advance.

Here is my code,

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.my1));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.feed_s));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.add_ds1));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.history_ds));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

style.xml

<style name="AppTheme.ActionBar" parent="Widget.AppCompat.Light.ActionBar">
    <item name="android:layout_width">50dp</item>
    <item name="android:layout_height">50dp</item>
</style>

tablayout.xml

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_below="@+id/toolbar"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:theme="@style/AppTheme.ActionBar"/>
like image 412
Veena Avatar asked Dec 12 '15 08:12

Veena


People also ask

What size are Android icons?

On Android devices, launcher icons are generally 96×96, 72×72, 48×48, or 36×36 pixels (depending on the device), however Android recommends your starting artboard size should be 864×864 pixels to allow for easier tweaking.


2 Answers

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);      }  } 
like image 123
Galeb Nassri Avatar answered Sep 28 '22 19:09

Galeb Nassri


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>
like image 31
Vadim Caen Avatar answered Sep 28 '22 19:09

Vadim Caen