2012-04-16 10 views
10

L'app ha un Barra delle azioni e ActionBar ha schede di navigazione, ciascuna contenente testo. Ho bisogno di aggiungere icone alle schede, oltre al testo.Allinea le icone della scheda di navigazione di ActionBar sopra il testo della scheda?

Ho aggiunto le icone utilizzando ActionBar.Tab.setIcon(drawable) correttamente, ma l'icona mostra a sinistra del testo della scheda.

Come si sposta l'icona della scheda in modo che sia SOPRA il testo della scheda di navigazione?

(sto usando ActionBarSherlock, ma capire la soluzione a questo funzionerà attraverso implementazioni native e ABS)

risposta

12

È possibile impostare una vista personalizzata per ogni scheda.

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

Sarebbe bello se hai postato il codice qui in caso di rottura di collegamento. – Joony

+1

Fatto, Joony. Stack Overflow non è un segnaposto perfetto per più di un paio di righe di codice, quindi ho mantenuto il link di primo livello. –

+1

Ecco un link a vogella.com dove mostra come aggiungere una vista personalizzata a una barra delle azioni senza actionBarSherlock. http://www.vogella.com/articles/AndroidActionBar/article.html#menu_customviews –

1

Nel file styles.xml è possibile aggiungere un <item name="android:drawableTop">@drawable/your_image.</item> Ciò funzionerà se si desidera che tutti le immagini devono essere le stesse nella parte superiore. Non so come farlo per le schede che usano ancora immagini diverse, sfortunatamente.

0

è molto semplice basta aggiungere Android: drawableTop = "@ drawable/your_image" al tuo Textview e rimuovere 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> 
Problemi correlati