Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create Smaller Tabs in Android

I am trying to create smaller tabs in android -- but I can't seem to get it to work because all that happens when I create a smaller tab is that it shows the bigger tab -- but without a drawable.

This is my layout code for tabs now -- but the height isn't wrapping for some reason -- it just goes to Android's usual layout height.

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
        </FrameLayout>
    </LinearLayout>
</TabHost>

It would be great if someone could help me create something like the Facebook application -- I think that looks really clean and I would love to implement something like it:

like image 707
hwrdprkns Avatar asked Aug 21 '10 20:08

hwrdprkns


People also ask

How do I change the width of my Android tablet?

Click the Default box for the Tab Scrolling setting. Now select one of the tabs shrink to options: pinned, medium, or large width setting. Alternatively, you can select a tabs don't shrink or Disabled option on that drop-down menu. Press Relaunch after selecting a tab width setting.

What is tabs in Android?

Tabs are created using newTab() method of TabLayout class. The title and icon of Tabs are set through setText(int) and setIcon(int) methods of TabListener interface respectively. Tabs of layout are attached over TabLayout using the method addTab(Tab) method.


2 Answers

Well this was far more complicated than I thought it should be but, nevertheless, this should get you a basic implementation of the appearance that you want...

 TabHost             host       = getTabHost();
 TabSpec             spec       = null;
 TextView            tab1       = null,
                     tab2       = null;
 Intent              intent     = null;
 Resources           resources  = getResources();
 XmlResourceParser   parser     = null;
 ColorStateList      text       = null;
 StateListDrawable[] drawables  = new StateListDrawable[2];
 int[]               selected   = {STATE_SELECTED},
                     unselected = {STATE_UNSELECTED};
 Color               selectedColor = Color.argb(255, 255, 255, 255),
                     defaultColor  = Color.argb(255, 119, 119, 119);

 // Load the colour lists.
 parser = resources.getXml(R.color.tab_text);
 text   = ColorStateList.createFromXml(getResources(), parser);

 // Add an initial tab.
 ...Create Tab Contents Here...
 spec = host.newTabSpec("tab1");
 tab1 = new TextView(this);
 tab1.setText(R.string.all_tab_title);
 tab1.setGravity(android.view.Gravity.CENTER);
 tab1.setTextSize(18.0f);
 tab1.setTextColor(text);
 spec.setIndicator(tab1);
 spec.setContent(intent);
 host.addTab(spec);

 // Add a second tab.
 ...Create Tab Contents Here...
 spec = host.newTabSpec("tab2");
 tab2 = new TextView(this);
 tab2.setText(R.string.category_tab_title);
 tab2.setGravity(android.view.Gravity.CENTER);
 tab2.setTextSize(18.0f);
 tab2.setTextColor(text);
 spec.setIndicator(tab2);
 spec.setContent(intent);
 host.addTab(spec);

 // Set the background drawable for the tabs and select the first tab.
 drawables[0] = new StateListDrawable();
 drawables[0].addState(selected, new ColorDrawable(selectedColor));
 drawables[0].addState(unselected, new ColorDrawable(defaultColor));
 drawables[1] = new StateListDrawable();
 drawables[1].addState(selected, new ColorDrawable(selectedColor));
 drawables[1].addState(unselected, new ColorDrawable(defaultColor));
 tab1.setBackgroundDrawable(drawables[0]);
 tab2.setBackgroundDrawable(drawables[1]);
 host.setCurrentTab(0);

This won't account for tab borders or the spacing between elements though. You also need a colour state list definition like the following in the ./res/color directory...

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true" android:color="#ff000000" />
   <item android:state_selected="false" android:color="#ffaaaaaa" />
   <item android:color="#ffffffff"/>
</selector>

Hope that helps.

like image 123
Woody Avatar answered Oct 17 '22 07:10

Woody


Saw this in another forum, but figured I'd pass it on here.


TabHost th = getTabHost();
....
// Setup all the tabs -- in my case, with text only -- no icons
....
int iCnt = th.getTabWidget().getChildCount();
for(int i=0; i&ltiCnt; i++)
  th.getTabWidget().getChildAt(i).getLayoutParams().height /= 2;  // Or the size desired
like image 25
J Crowley Avatar answered Oct 17 '22 07:10

J Crowley