2010-08-21 22 views
6

Estoy tratando de crear pestañas más pequeñas en Android, pero parece que no puedo hacer que funcione porque todo lo que sucede cuando creo una pestaña más pequeña es que muestra la pestaña más grande, pero sin un drawable.Crear pestañas más pequeñas en Android

Este es mi código de diseño para pestañas ahora, pero la altura no se ajusta por alguna razón, simplemente va a la altura de diseño habitual de Android.

<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> 

Sería muy bueno si alguien me podría ayudar a crear algo así como la aplicación de Facebook - Creo que se ve muy limpio y me gustaría poner en práctica algo semejante:

Respuesta

7

Bueno, esto era mucho más complicado de lo que pensaba que debería ser, pero, sin embargo, esto debe obtener una implementación básica de la apariencia que desea ...

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); 

esto no va a dar cuenta de las fronteras de la ficha o el espaciamiento entr n elementos sin embargo. También necesita una definición de lista de estados de color como la siguiente en el directorio ./res/color ...

<?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> 

Espero que ayude.

+0

Guau, esto es definitivamente mucho más de lo que estaba buscando, supongo que aceptaré esta respuesta hasta que alguien publique una manera más segura. – hwrdprkns

+0

STATE_SELECTED y STATE_UNSELECTED se supone que son id de qué? – pakore

+1

@pakore - Disculpas por descuidar estas definiciones. STATE_SELECTED se define como igual a android.R.attr.state_selected. STATE_UNSELECTED es igual a STATE_SELECTED * -1. – Woody

3

Vi esto en otro foro, pero pensé que lo transmitiría aquí.


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 
+0

Intenté esto y funciona – Federico

Cuestiones relacionadas