【背景】
需要在android的actionbar中,增加一个设置setting菜单。
【折腾过程】
1.搜:
android actionbar setting menu
参考:
但是其中提到的:
menu的xml配置和onCreateOptionsMenu,我这里都有过了。
但是显示出来的是水平位置的menu菜单,而不是三个点的那种:
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);
}
}
即可正常显示菜单,并且编辑菜单在需要时显示:
和消失:
【总结】
此处新版本Android,即3.0+,没有了三个点的那种配置选项菜单了。
所以只能把一堆的设置选项菜单都放到ActionBar上面了。
虽然很丑,但是凑合用吧。。