选项菜单未显示在ActionBar上

时间:2014-05-12 10:58:43

标签: android android-actionbar options android-menu

我希望使用MenuActionBar中显示ActionBarActivity

我在点击选项按钮时获取选项菜单,而不是显示在操作栏的顶部。

我需要顶部的选项菜单,而不是点击2.3以后的选项菜单

Here is the image

我的代码:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setSubtitle("mytest");
    actionBar.setTitle("Testing");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_action, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_item_one:
        Toast.makeText(this, "clicked search", Toast.LENGTH_SHORT).show();
        break;

    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }
}

}

我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/menu_item_one"
    android:icon="@drawable/ic_launcher"
    android:showAsAction="always"
    android:title="@string/action_settings"/>
<item
    android:id="@+id/menu_item_two"
    android:icon="@drawable/ic_launcher"
    android:showAsAction="always"
    android:title="@string/action_settings"/>

</menu>

6 个答案:

答案 0 :(得分:2)

试一试:

在“../ res / menu / menu_main.xml”

上创建XML文件

<强> manu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_settings"
        android:showAsAction="never"
        android:icon="@android:drawable/ic_menu_settings"
        android:title="@string/menu_settings"/>

</menu>

“showAsAction”选项“never”,重要的是,如果你把选项总是显示在ActionBar上。

然后现在我们必须在MainActivity.java(你想要的任何类)上关联这个选项。

<强> MainActivity.java

public class MainActivity extends Activity {

    ...

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

现在我们定义操作栏的元素是知道如何响应用户对它们做出的击键。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.menu_settings:
            Log.i("ActionBar", "Settings!");;
            //open Activity,Fragments or other action
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

如果菜单上有更多选项,只需在XML menu_main.xml上添加项目,在主类上添加其他“case”。

例如:

<强> MainActivity.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.menu_save:
            Log.i("ActionBar", "Save!");;
            //open Activity,Fragments or other action
            return true;
        case R.id.menu_settings:
            Log.i("ActionBar", "Settings!");;
            //open Activity,Fragments or other action
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

<强> menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

        <item
            android:id="@+id/menu_settings"
            android:showAsAction="never"
            android:icon="@android:drawable/ic_menu_settings"
            android:title="@string/menu_settings"/>

        <item
            android:id="@+id/menu_save"
            android:showAsAction="never"
            android:icon="@android:drawable/ic_menu_save"
            android:title="@string/menu_save"/>

    </menu>

答案 1 :(得分:2)

这可能是因为您的设备有一个选项按钮可以打开菜单,因此Android不会绘制启动器图标。

http://blog.vogella.com/2013/08/06/android-always-show-the-overflow-menu-even-if-the-phone-as-a-menu/

答案 2 :(得分:1)

根据以下android文档,在return super.onCreateOptionsMenu(menu);方法中尝试使用return true代替onCreateOptionsMenu ...

http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

按照上面的android文档......

ActionBar API最初是在Android 3.0(API级别11)中添加的,但它们也可以在支持库中找到,以便与Android 2.1(API级别7)及更高版本兼容。 所以,如果你想在Android 2.3中使用ActionBar,那么你必须使用 Android支持库

修改

您的菜单XML需要如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"
>

<item android:id="@+id/item_menu_ok" 
android:icon="@drawable/ic_action_ok"
android:title="@string/ok" 
yourapp:showAsAction="always"/>

<item android:id="@+id/item_menu_cancel" 
android:icon="@drawable/ic_action_cancel"
android:title="@string/cancel"
yourapp:showAsAction="always"/>

</menu>

yourapp 替换为您的应用名称或任何命名空间。

答案 3 :(得分:0)

我不是百分百肯定,但看起来您的菜单XML文件中应该包含菜单。在菜单中,添加项目。像这样:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_menu" >

    <item...

    <item...

</menu>

也许这有效。

一般来说,还有一些其他事情需要记住。 Android自行决定在ActionBar中显示什么(取决于适合那里和其他参数)。什么不适合ActionBar进入溢出。

答案 4 :(得分:0)

在你的oncreate()

中这样做
ActionBar actionBar = getActionBar();
actionBar.show();

这应该做你想要的。 Action Bar

答案 5 :(得分:0)

好的,让我们试试另一个答案。 如果,无论出于何种原因,Android决定不在动作栏中显示项目,那么您所看到的确实是正确的行为。不在操作栏中的项目显示为溢出。

项目未在操作栏中显示的一个原因是因为它们没有定义图标。

您确实定义了一个图标,

 android:icon="@drawable/ic_launcher"

我怀疑这是问题所在。启动器图标的大小(大于)与操作栏项目(较小)不同。尝试以正确的大小定义图标,看看它是否显示。

http://developer.android.com/design/style/iconography.html

编辑:有一个操作栏图标包可以帮助您入门,以便您可以测试它是否有效。下载并使用eclipse导入一些图标..