Android 如何从片段将微调器居中放置在actionbar中

Android 如何从片段将微调器居中放置在actionbar中,android,android-actionbar,spinner,android-ui,Android,Android Actionbar,Spinner,Android Ui,那么,如何从fragment在actionbar的中心添加微调器呢 我已经这样做了: ActionBar菜单文件:R.menu.tabmap <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_map_spinner"

那么,如何从fragment在actionbar的中心添加微调器呢

我已经这样做了:

ActionBar菜单文件:R.menu.tabmap

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item 
        android:id="@+id/action_map_spinner"
        android:showAsAction="always"
        android:actionLayout="@layout/actionbar_spinner">
    </item>

    <item
        android:id="@+id/action_map_more"
        android:orderInCategory="100"
        android:showAsAction="always|withText"        
        android:icon="@drawable/ic_setting"
        android:title="@string/action_map_more"/>

</menu>
但是,旋转器不在中心,知道吗?

这是因为操作栏中的第二项,即actionMapMore,也会占用部分操作栏。您应该将菜单的第二项放在自定义布局中,并通过
LinearLayout

对其进行正确操作。一种方法是为ActionBar实现自定义视图。您可以使用自定义视图显示几乎任何内容,而不仅仅是微调器。缺点是您需要自己处理ActionBar中的添加/删除菜单项

如果你有更好的解决办法,我很想听听

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center|top"
    android:gravity="center"
    android:orientation="vertical" >

    <Spinner
        android:id="@+id/actionbar_spinner_change_map"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center" />

</LinearLayout>
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
    inflater.inflate(R.menu.tabmap, menu);
    Spinner spinner = (Spinner) menu.findItem(R.id.action_map_spinner).getActionView()
                                .findViewById(R.id.actionbar_spinner_change_map);

    spinner.setAdapter(mSpinnerAdapter);
    super.onCreateOptionsMenu(menu, inflater);
}