最近看到一篇新闻,google工程师督促android开发者不要依赖物理Menu键,而是要多用下拉菜单,以后的android会放弃三个物理按键的设定,只保留一个。然后就试着学习了下在ActionBar中的按钮以及下拉菜单是如何实现的。但是只能找到一部分的例子,不过还是有所收获,以下是效果图:
关于ADD按钮其实就是物理Menu键的一种,只不过在定义该按钮时加上一行android:showAsAction="ifRoom",就可以让它在ActionBar上显示,而不是出现在下面。代码如下
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:orderInCategory="100"
android:showAsAction="never" />
<item
android:id="@+id/add"
android:title="@string/add"
android:showAsAction="ifRoom"
/>
</menu>
除了ADD还可以随意添加多个按钮到ActionBar上,不过空间有限,当超出了ActionBar的范围时就不会在上面显示该按钮,而会转到物理Menu弹出的那个地方去显示。当然,该过程也可以在代码中的onCreateOptionsMenu方法中来进行,代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
MenuItem add = menu.add(0, 1, 0, "add");
MenuItem open = menu.add(0, 2, 1, "open");
MenuItem close = menu.add(0, 3, 2, "close");
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
open.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
close.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
//MenuInflater inflater = getMenuInflater();
//inflater.inflate(R.menu.activity_main, menu);
return true;
}
而至于那个可以下拉的one按钮,暂时还没有找到可以让它布局到右上角的方法,它是一个类似于列表导航的功能,位置是直接定好的,不知道能不能修改。代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//button = (Button)findViewById(R.id.btn);
//button.setOnClickListener(this);
setUpActionBar(false, 0);
}
private void setUpActionBar(boolean showTabs, int selTabs) {
// TODO Auto-generated method stub
android.app.ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
//CompatActionBarNavHandler handler = new CompatActionBarNavHandler((CompatActionBarNavListener) this);
actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
SpinnerAdapter adapter = new ArrayAdapter<String>(this, R.layout.actionbar_list_item, CHOOSE);
actionBar.setListNavigationCallbacks(adapter, null);
actionBar.setDisplayUseLogoEnabled(true);
}
它是用android.app.ActionBar中的setNavigationMode和setListNavigationCallbacks方法来实现的。下拉菜单的样式可以在R.layout.actionbar_list_item中定义,内容可以用CHOOSE字串数组来填充。但是下拉菜单的启动按钮应该如何实现布局,我还没有找到方法。看了官方API的samples,虽然honeycombGallery中有一样的控件,但是它没有调整该控件的位置,如果有知道的大神,希望不吝赐教下!
至于下拉菜单的按钮事件监听,是在onCategorySelected方法中实现的,代码如下:
@Override
public void onCategorySelected(int catIndex) {
log("onCategorySelected called");
//setNewsCategory(catIndex);
//do something here
}
参数catIndex是相应按钮的ItemID,用来确定是哪个按钮被点击了。