8

Sto tentando di visualizzare uno spinner nella stessa posizione in cui appare il titolo predefinito della barra delle azioni. Ho seguito le istruzioni del simile SO case here, così sono riuscito a eliminare il titolo, ma ancora la posizione del filatore non è allineato a sinistra, come si può vedere da questo screen-shotSostituisci il titolo della barra delle azioni con uno spinner (menu a discesa)

apinner not aligned to the left

Ecco le principali definizioni di mia applicazione per riprodurre questo caso:

AndroidMenifest.xml:

<application 
     android:label="app"    
     android:icon="@drawable/ic_launcher" 
     android:theme="@style/Theme.AppCompat" > 
... 
    <activity 
     android:name="gm.activities.ViewAllActivity">    
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="gm.activities.MainActivity" /> 
    </activity> 

menu_view_all.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="gm.activities.ViewAllActivity"> 
    <item android:id="@+id/spinner" 
     android:title="will be replaced anyway" 
     app:showAsAction="ifRoom" 
     app:actionViewClass="android.widget.Spinner" 
     android:layout_gravity="left" 
     android:gravity="left"/> 
    <item android:id="@+id/action_settings" android:title="@string/action_settings" 
     android:orderInCategory="100" app:showAsAction="never" /> 
</menu> 

e l'attività in questione:

public class ViewAllActivity extends ActionBarActivity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_all_activity); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 
... 
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_view_all, menu); 
     MenuItem item = menu.findItem(R.id.spinner); 
     Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 
     spinner.setGravity(Gravity.LEFT); 
     SpinnerAdapter adapter; 
     spinner.setAdapter(ArrayAdapter.createFromResource(this, 
       R.array.all_table_views, android.R.layout.simple_spinner_item)); 
     spinner.setOnItemSelectedListener(this); // set the listener, to perform actions based on item selection 
     return true; 
    } 

Così - Posso allineare il filatore a sinistra della barra delle operazioni e come? E 'corretto usare lo spinner all'interno della barra di azione e impostarlo attraverso il file menu.xml come ho fatto io?

risposta

5

Le azioni nel menu View si allineano sempre a destra. Se vuoi che il tuo Spinner sia allineato a sinistra, sarebbe preferibile impostarlo come personalizzato su ActionBar utilizzando il metodo setCustomView(). Una custom View si allinea alla sinistra di default, e prenderà il posto del titolo se questo è nascosto. Si prega di notare che questo richiede che chiami setDisplayShowCustomEnabled(true) su ActionBar.

+1

Volevo anche menzionare che chiamare 'setGravity()' su una 'Vista 'influenza il contenuto di' View', non la sua posizione di layout. Solo FYI. –

+0

Grazie! questa è la soluzione che ho implementato, in base al tuo suggerimento: http://stackoverflow.com/questions/15542059/spinner-in-actionbar-doesnt-appear – GyRo

+0

@GyRo Cool! Sono contento di sapere che hai funzionato. Volevo solo menzionare che quel metodo funzionerebbe ancora se dovessi decidere in futuro di usare un 'Toolbar' come il tuo supporto' ActionBar'. Assicurati di chiamare 'setSupportActionBar()' con esso. Saluti! –