android学习日记:关于ActionBar和Menu

最近看到一篇新闻,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,用来确定是哪个按钮被点击了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值