8

Ich versuche, einen Spinner an der gleichen Position anzuzeigen, wo der Standardtitel der Aktionsleiste angezeigt wird. ich die Anweisung des ähnlichen SO case here gefolgt, so habe ich es geschafft, den Titel zu beseitigen, aber immer noch die Position des Spinners ist nicht nach links ausgerichtet, wie Sie von diesem Bildschirm-shotErsetzen Sie den Titel der Aktionsleiste durch einen Drehfeld (Dropdown)

apinner not aligned to the left

sind sehen hier die wichtigsten Definitionen meiner Bewerbung um diesen Fall zu reproduzieren:

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> 

und die entsprechende Aktivität:

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

So - Kann ich den Spinner nach links von der Aktionsleiste ausrichten und wie? Ist es richtig Spinner in der Aktionsleiste zu verwenden und durch die menu.xml Datei zu setzen, wie ich es getan habe?

Antwort

5

Aktion View s im Menü werden immer nach rechts ausgerichtet. Wenn Sie Ihren Spinner linksbündig ausrichten möchten, ist es besser, ihn als benutzerdefinierten View auf dem ActionBar unter Verwendung der setCustomView() Methode festzulegen. Eine benutzerdefinierte View wird standardmäßig nach links ausgerichtet und ersetzt den Titel, wenn dieser ausgeblendet ist. Bitte beachten Sie, dass dies erfordert, dass Sie setDisplayShowCustomEnabled(true) auf dem ActionBar anrufen.

+1

Ich wollte auch erwähnen, dass das Aufrufen von 'setGravity()' auf einer 'Ansicht' den Inhalt der' Ansicht' betrifft, nicht ihre Layoutposition. Nur zu deiner Information. –

+0

Danke! Dies ist die Lösung, die ich implementiert habe, basierend auf Ihrem Vorschlag: http://stackoverflow.com/questions/15542059/spinner-in-actionbar-doesnt-appear – GyRo

+0

@GyRo Cool! Freut mich zu hören, dass es funktioniert hat. Ich wollte nur erwähnen, dass diese Methode auch dann noch funktioniert, wenn Sie sich in Zukunft für eine 'Toolbar' als Unterstützung' ActionBar' entscheiden sollten. Stellen Sie sicher, dass Sie 'setSupportActionBar()' damit aufrufen. Prost! –

Verwandte Themen