用微调器替换操作栏的标题(下拉)
Replace the action bar's title with a spinner (drop down)
我试图在操作栏的默认标题出现的相同位置显示微调器。
我按照类似 SO case here 的说明进行操作,
所以我设法消除了标题,但微调器的位置仍然没有向左对齐,正如您从中看到的 screen-shot
以下是我重现此案例的应用程序的主要定义:
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>
和相关的activity:
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;
}
所以 - 我可以将微调器与操作栏的左侧对齐吗?如何实现?
在操作栏内使用微调器并像我一样通过 menu.xml 文件设置它是否正确?
菜单中的操作 View
始终向右对齐。如果您希望 Spinner
左对齐,最好使用 setCustomView()
方法将其设置为 ActionBar
上的自定义 View
。默认情况下,自定义 View
将左对齐,如果标题被隐藏,它将取代标题。请注意,这需要您在 ActionBar
.
上调用 setDisplayShowCustomEnabled(true)
我试图在操作栏的默认标题出现的相同位置显示微调器。 我按照类似 SO case here 的说明进行操作, 所以我设法消除了标题,但微调器的位置仍然没有向左对齐,正如您从中看到的 screen-shot
以下是我重现此案例的应用程序的主要定义:
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>
和相关的activity:
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;
}
所以 - 我可以将微调器与操作栏的左侧对齐吗?如何实现? 在操作栏内使用微调器并像我一样通过 menu.xml 文件设置它是否正确?
菜单中的操作 View
始终向右对齐。如果您希望 Spinner
左对齐,最好使用 setCustomView()
方法将其设置为 ActionBar
上的自定义 View
。默认情况下,自定义 View
将左对齐,如果标题被隐藏,它将取代标题。请注意,这需要您在 ActionBar
.
setDisplayShowCustomEnabled(true)