Замените заголовок панели действий на spinner (выпадающий список)


Я пытаюсь отобразить спиннер в том же положении, в котором отображается заголовок панели действий по умолчанию. Я следовал инструкции аналогичного так что случай здесь , таким образом, мне удалось исключить название, но все еще положение спиннера не выровнено влево, как вы можете видеть из этого снимка экрана

апиннер не выровнен по левому краю

Вот основные определения моего приложения, чтобы воспроизвести это кейс:

Андроидменифест.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>

И соответствующая деятельность:

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

Итак-могу ли я выровнять спиннер слева от панели действий и как? Правильно ли использовать spinner внутри панели действий и устанавливать его через меню .xml файл, как я сделал?

1 8

1 ответ:

Действие Views в меню всегда будет выравниваться вправо. Если вы хотите, чтобы ваш Spinner выровнялся слева, было бы лучше установить его в качестве пользовательского View на ActionBar, используя метод setCustomView(). Пользовательский View по умолчанию выровняется слева и займет место заголовка, если он скрыт. Обратите внимание, что для этого необходимо вызвать setDisplayShowCustomEnabled(true) на ActionBar.