android的actionbar及菜单机制,【已解决】android中actionbar中增加setting菜单

【背景】

需要在android的actionbar中,增加一个设置setting菜单。

【折腾过程】

1.搜:

android actionbar setting menu

参考:

但是其中提到的:

menu的xml配置和onCreateOptionsMenu,我这里都有过了。

但是显示出来的是水平位置的menu菜单,而不是三个点的那种:

a1cb5ebe1a515553972862312421cc23.png

2.参考:

去再添加一个item,然后加上android:showAsAction="never"试试:

另外也参考:

看了never的含义:

neverNever place this item in the Action Bar.

然后写成:

(1)/res/menu/settings.xml

android:id="@+id/menu_settings"

android:title="@string/settings"

android:showAsAction="never" />

(2)Activity中:@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

MenuInflater inflater = getMenuInflater();

//inflater.inflate(R.menu.activity_main, menu);

inflater.inflate(R.menu.settings, menu);

return true;

}

但是没有显示出来。

3.参考:

但是没法添加:setHasOptionsMenu(true);

否则会出错:The method setHasOptionsMenu(boolean) is undefined for the type MainActivity

因为此处是:public class MainActivity extends FragmentActivity implements ISubscriber{

而不是继承自fragment。

4.参考:

说是:android:targetSdkVersion="10"

或更低才能出现所希望看到的,垂直方向的,三个点的配置按钮。

5.搜:

android three option menu

参考:

解释是:

android 3.0之后,就从:

三个点的配置按钮

改为:

把配置选项都放到Actionbar中了。

所以:

此处所想要看到的,三个点的配置按钮,新版的Android已经没了。

意味着:

我此处只需要在Actionbar中加menu即可,无需,也没法,显示出那个三个点的效果了。

6.所以看来需要此处去把之前的,新加的setting菜单正常加到之前的菜单中,估计就可以正常显示了。

(1)/res/menu/activity_main.xml

android:id="@+id/menu_discard"

android:icon="@drawable/error_white"

android:orderInCategory="1"

android:showAsAction="ifRoom|withText"

android:title="@string/discard"/>

android:id="@+id/menu_send"

android:icon="@drawable/forward_white"

android:orderInCategory="2"

android:showAsAction="ifRoom|withText"

android:title="@string/send"/>

android:id="@+id/menu_settings"

android:icon="@drawable/settings"

android:orderInCategory="3"

android:showAsAction="ifRoom|withText"

android:title="@string/settings"/>

(2)代码:@Override

public boolean onCreateOptionsMenu(Menu menu) {

mMenu = menu;

// Inflate the menu; this adds items to the action bar if it is present.

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.activity_main, menu);

//inflater.inflate(R.menu.settings, menu);

//getMenuInflater().inflate(R.menu.activity_main, menu);

//when first create menu, can NOT hidden them here, otherwise later will not show menus

//hiddenEditMenu();

return true;

}

private void hiddenEditMenu(){

if(null != mMenu){

// for (int i = 0; i < mMenu.size(); i++){

// mMenu.getItem(i).setVisible(false);

// mMenu.getItem(i).setEnabled(false);

// }

mMenu.findItem(R.id.menu_discard).setVisible(false);

mMenu.findItem(R.id.menu_send).setVisible(false);

}

}

private void showEditMenu(){

if(null != mMenu){

// for (int i = 0; i < mMenu.size(); i++){

// mMenu.getItem(i).setVisible(true);

// mMenu.getItem(i).setEnabled(true);

// }

mMenu.findItem(R.id.menu_discard).setVisible(true);

mMenu.findItem(R.id.menu_send).setVisible(true);

}

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle item selection

switch (item.getItemId()) {

case R.id.menu_discard:

//Toast.makeText(MainActivity.this, "Menu Discard cliked", Toast.LENGTH_SHORT).show();

clearEditedVarValues();

return true;

case R.id.menu_send:

//Toast.makeText(MainActivity.this, "Menu Send cliked", Toast.LENGTH_SHORT).show();

writeEditedVarValues();

return true;

case R.id.menu_settings:

return true;

default:

return super.onOptionsItemSelected(item);

}

}

即可正常显示菜单,并且编辑菜单在需要时显示:

13439331a5c6dd5391c4602f12547475.png

和消失:

671045a91c112548529a63bd61911da0.png

【总结】

此处新版本Android,即3.0+,没有了三个点的那种配置选项菜单了。

所以只能把一堆的设置选项菜单都放到ActionBar上面了。

虽然很丑,但是凑合用吧。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值