2012-04-16 15 views
10

La aplicación tiene una barra de acciones, y la barra de acciones tiene pestañas de navegación, cada una contiene texto. Necesito agregar iconos a las pestañas, además del texto.Alinee los iconos de la ficha de navegación ActionBar sobre el texto de la pestaña?

He agregado los iconos usando ActionBar.Tab.setIcon(drawable) con éxito, pero el icono se muestra a la izquierda del texto de la pestaña.

¿Cómo muevo el ícono de la pestaña para que esté ARRIBA del texto de la pestaña de navegación?

(estoy usando ActionBarSherlock, pero averiguar la solución a esto funcionará a través de implementaciones nativas y ABS)

Respuesta

12

Puede establecer una vista personalizada para cada pestaña.

https://gist.github.com/3167287

PropositionListActivity.java

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockActivity; 
import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.drawable.Drawable; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.ImageView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.NavUtils; 

public class PropositionListActivity extends SherlockActivity implements ActionBar.TabListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.proposition_list); 

     getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     createTab(R.layout.tab_to_opine, R.id.tab_to_opine_title, "Vou Opinar"); 
     createTab(R.layout.tab_opined, R.id.tab_opined_title, "Já Opinei"); 
     createTab(R.layout.tab_feedback, R.id.tab_feedback_title, "Feedback"); 
    } 

    public void createTab(int view, int titleView, String title) { 
     ActionBar.Tab tab = getSupportActionBar().newTab(); 
     tab.setTabListener(this); 
     tab.setCustomView(view); 
     getSupportActionBar().addTab(tab); 

     ((TextView) findViewById(titleView)).setText(title); 
    } 
} 

tab_to_opine.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/tab_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/tab_to_opine" 
     android:background="@android:color/transparent" /> 

    <TextView 
     android:id="@+id/tab_to_opine_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+1

Sería bueno si usted envió el código de aquí en caso de rotura del enlace. – Joony

+1

Hecho, Joony. Stack Overflow no es un marcador de posición perfecto para más de un par de líneas de código, por lo que aún conservo el enlace principal. –

+1

Aquí hay un enlace a vogella.com donde muestra cómo agregar una vista personalizada a una barra de acción sin actionBarSherlock. http://www.vogella.com/articles/AndroidActionBar/article.html#menu_customviews –

1

En el archivo styles.xml puede añadir un <item name="android:drawableTop">@drawable/your_image.</item> Esto funcionará si desea que todos las imágenes son iguales en la parte superior. Todavía no sé cómo hacer esto para las pestañas que usan diferentes imágenes desafortunadamente.

0

su muy simple basta con añadir androide: drawableTop = "@ estirable/your_image" a su Textview y eliminar ImageView

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<TextView 
    android:id="@+id/tab_to_opine_title" 
    android:layout_width="wrap_content" 
    android:drawableTop="@drawable/your_image" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 
Cuestiones relacionadas