通过一些实验,我设法完成了我想要完成的部分工作。我不确定这是否是最好的方法,但它确实有效。
我发现微调器不会显示在屏幕最右侧的原因是因为该空间是为菜单项保留的。如果您还记得,我不使用菜单项的最初原因是因为在旧设备上,当您点击菜单按钮时,它会在屏幕底部显示项目(不是我想要的)。但我找到了解决办法。
我首先在 XML 中创建了我的菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/spinner_menu_item"
android:showAsAction="always"
android:actionLayout="@layout/spinner" />
</menu>
和"@layout/spinner"
:
<?xml version="1.0" encoding="utf-8"?>
<com.actionbarsherlock.internal.widget.IcsSpinner xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinner_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
然后在 onCreateOptionsMenu 中:
getSupportMenuInflater().inflate(R.menu.basic_menu, menu);
MenuItem item = menu.findItem(R.id.spinner_menu_item);
spinnerMenu = (IcsSpinner)item.getActionView();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_dropdown_item_1line, menuItems);
spinnerMenu.setAdapter(adapter);
spinnerMenu.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener() {}
最后我覆盖了菜单按钮,如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_MENU){
spinnerMenu.performClick();
return true;
}
return super.onKeyDown(keyCode, event);
}
唯一不会做的是显示图标而不是文字。但是已经成功了一半!我希望这会帮助面临类似问题的人。