如何改变对动作条菜单项的位置(How to change the position of menu

2019-08-31 11:22发布

我正在开发一个应用程序中,我必须在动作条中添加自定义布局。 添加自定义布局完成,但是当我加入的动作条我的自定义布局中的菜单项,改变它的位置从动作条的右侧的动作条的中心。 下面是我迄今所取得的图像。

我想是这样的动作条。

自定义布局(黄色按钮),在中间的动作条和菜单项的右侧大部分。

添加我的代码使用原生的Android动作条来实现这个自定义布局:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    actionBar = getActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    cView = getLayoutInflater().inflate(R.layout.header, null);
    actionBar.setCustomView(cView);

}

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

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:
        finish();

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

如何才能实现这一目标?

任何形式的帮助将不胜感激。

Answer 1:

我假设你正在设置您的自定义视图操作栏中的自定义视图。 如果你正在使用ActionbarSherlock可以代替添加自定义视图作为一个正常的菜单项,并为它用一个动作视图.setActionView(yourCustomView or yourCustomLayoutId) 然后,您可以设置.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)显示视图。 只要确保你的自定义视图设置为宽度wrap_content或否则将推动关闭屏幕的其他菜单项。 这可能也是工作,没有ActionbarSherlock,但我还没有尝试过那里。

编辑:请尝试修改您的onCreateOptionsMenu方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.websearch_menu, menu);

    // add this
    menu.add(Menu.NONE, 0, Menu.NONE, "custom")
        .setActionView(R.layout.header)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    return true;
}

并从onCreate方法删除此

actionBar.setDisplayShowCustomEnabled(true);
cView = getLayoutInflater().inflate(R.layout.header, null);
actionBar.setCustomView(cView);

编辑:

如果您需要从您的自定义布局参考的意见,你可以在你做这个onCreateOptionsMenu方法如下(注:我写了这个代码在浏览器中,所以无法保证,我没有发现错字或东西):

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // inflate the menu and add the item with id viewId,
    // which has your layout as actionview

    View actionView = menu.getItem(viewId).getActionView();
    View viewFromMyLayout = actionView.findViewById(R.id.viewFromMyLayout);

    // here you can set listeners to your view or store a reference 
    // to it somewhere, so you can use it later

    return true;
}


Answer 2:

只需使用orderInCategory在XML文件中,它会从少数量订货量更大(从你的动作条的左侧)。 如:

<item
    android:id="@+id/Refresh"
    android:icon="@drawable/ic_action_refresh"
    android:showAsAction="ifRoom"
    android:title="@string/refresh"
    android:orderInCategory="2"/>
<item
    android:id="@+id/Search"
    android:icon="@drawable/ic_action_action_search"
    android:showAsAction="ifRoom|collapseActionView"
    android:title="@string/search"
    android:orderInCategory="1"/>

即便如此, 刷新项目是第一次来的XML文件,它不会是第一次。 但是, 搜索图标从左到右分辩在你的动作条将首先根据其orderInCategory属性。



Answer 3:

菜单项的顺序将根据他们的,他们正在膨胀的XML文件中的顺序设置。

因此,所有你需要做的是改变的XML文件中的顺序,只要你喜欢。



Answer 4:

实现这一目标的方法之一是通过调用invalidateOptionMenu并在onCreateOptionsMenu方法,把项目按照你希望把它们的顺序。

顺便说一句,如果你使用ActionBarSherlock,这种方法是可行的,所以忽略它的lint警告。



文章来源: How to change the position of menu items on actionbar