Android: 如何在上方操作栏上准确显示溢出菜单

Android: How can show overflow menu exactly on the upper Action bar

我的操作栏中有一个溢出菜单,它在某些设备中显示在上方操作栏中,在其他设备中显示在下方操作栏中,我想在所有设备中的上方操作栏中显示我的溢出菜单设备。请帮助我。

我的溢出菜单:

<item
android:id="@+id/menu_overflow"
android:icon="@drawable/color"
android:orderInCategory="11111"
android:showAsAction="always">
<menu>
    <item
        android:id="@+id/whitecolor"
        android:showAsAction="never"
        android:icon="@drawable/colorwhite"
        android:title="white"/>


    <item
        android:id="@+id/yellowcolor"
        android:showAsAction="never"
        android:icon="@drawable/coloryellow"
        android:title="yellow"/>


    <item
        android:id="@+id/redcolor"
        android:showAsAction="never"
        android:icon="@drawable/colorred"
        android:title="red"/>


    <item
        android:id="@+id/bluecolor"
        android:showAsAction="never"
        android:icon="@drawable/colorblue"
        android:title="blue"/>
</menu>
</item>

和我的代码:

public boolean onOptionsItemSelected(MenuItem menuItem)
    {       
        switch (menuItem.getItemId()) {         
            case R.id.whitecolor:           

                finish();
                break;
            case R.id.yellowcolor:

                finish();
                break;
            case R.id.redcolor:

                finish();
                break;
            case R.id.bluecolor:

                finish();
                break;
        }
        return true;
    }

使用 Material 由于其设计理念而内置支持的设计

如果您为 Android 2.3.x(API 级别 10) 或更低级别开发了应用程序,则当用户按下菜单按钮时,您的选项菜单出现在屏幕底部,如下图所示。

如果您开发的应用程序是 Android 3.0(API 级别 11)更高级别 , 选项菜单中的项目在操作栏中可用。默认情况下,系统将所有项目放在操作溢出中,用户可以使用操作栏右侧的操作溢出图标(或通过按设备菜单按钮,如果可用)来显示。要快速访问重要操作,您可以通过将 android:showAsAction="ifRoom" 添加到相应的 <item> 元素

来提升一些项目出现在操作栏中

尝试使用Toolbar,您可以在所有版本和所有设备上显示溢出。

试试这个。例如。如果您想要更多,请创建布局并将其设置为您的操作栏。

      ActionBar actionBar = getActivity().getActionBar();
        actionBar.setDisplayOptions(actionBar.getDisplayOptions()
                | ActionBar.DISPLAY_SHOW_CUSTOM);
        ImageView imageView_done = new ImageView(actionBar.getThemedContext());
        imageView_done.setScaleType(ImageView.ScaleType.CENTER);
        imageView_done.setImageResource(R.drawable.ic_action_done);
        ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
                ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT
                | Gravity.CENTER_VERTICAL
        );
        layoutParams.rightMargin = 40;
        imageView_done.setLayoutParams(layoutParams);
        actionBar.setCustomView(imageView_done);