views:

1192

answers:

5

I'd like to my Android tabs to look flat and simple like the ones in the official TWitter app. How can I override the default (light) theme and change the background images for the tabs using style/theme definitions?

+2  A: 

You could adjust the tabs via code - here's an excerpt from my application, but you could also assign themes instead of the background image directly. (I haven't used a way via xml attributes yet, not sure if that's available as well somehow).

private void initTabs() {
    tabs = (TabHost) findViewById(R.id.tabhost);
    tabs.setup();
    tabs.setBackgroundResource(R.drawable.bg_midgray);

   TabHost.TabSpec spec;

   // Location info
   txtTabInfo = new TextView(this);
   txtTabInfo.setText("INFO");
   txtTabInfo.setPadding(0, 5, 0, 0);
   txtTabInfo.setTextSize(11);

   txtTabInfo.setBackgroundResource(R.drawable.bg_tab_left_active_right_inactive);
   txtTabInfo.setTextColor(Color.DKGRAY);
   txtTabInfo.setGravity(Gravity.CENTER_HORIZONTAL);
   txtTabInfo.setHeight(39);
   spec = tabs.newTabSpec("tabInfo");
   spec.setContent(R.id.tabInfo);
   spec.setIndicator(txtTabInfo);
   tabs.addTab(spec);
   ...
}
Mathias Lin
A: 

You could also do it via XML and create/define a global theme for all tabs in your app. There's more info on creating widget themes here: http://developer.android.com/guide/topics/ui/themes.html

Scott Ferguson
A: 

Hi Mathias I m abit confuse about this line. txtTabInfo = new TextView(this);

where is txtTabInfo come from. I tried it and it give me error coz I can't put textview into spec.setIndicator. Please help. Thanks.

kgfaith
A: 

@kgfaith You can't put a TextView into the TabHost.TabSpec.setIndicator() if you are using an API level less than 4.

Chris L.
+1  A: 
 spec.setIndicator(txtTabInfo);

This is not allowed. Compiler gives error at this line.

sachin