如何向工具栏添加溢出菜单?

时间:2016-09-11 17:58:01

标签: android android-actionbar android-appcompat

我尝试在我的应用中使用Android <select class="select" ng-options="option as option.name for option in abc track by option.id" ng-model="row.categoryId"></select> ,并在溢出菜单中隐藏了一个选项。

那里有很多文档,但它令人困惑,因为大多数文档只与非常旧版本的Android有关,当你尝试应用相同的概念时,它们不会不再工作或以不同的方式工作。

这是我的ActionBar布局

Activity

这是我的<android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:titleTextColor="@android:color/white" android:background="@color/colorPrimary" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> Activity方法

onCreate()

我还尝试过// sets up activity toolbar Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); myToolbar.showOverflowMenu(); myToolbar.setTitleTextColor(R.color.lightPrimaryText); 中的菜单xml文件,但这也没有给我我想要的结果。

3 个答案:

答案 0 :(得分:43)

res / menu 资源文件夹中为Menu定义Toolbar,例如:

toolbar_menu.xml

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

    <item
        android:id="@+id/action_sign_out"
        android:title="@string/toolbar_sign_out"
        app:showAsAction="never"/>
</menu>

设置app:showAsAction="never"可确保此MenuItem不会显示在Toolbar中,而是放在溢出菜单中。

Activity的主题应该是(或来自)其中一个NoActionBar主题(例如Theme.AppCompat.NoActionBar,或Theme.MaterialComponents.NoActionBar如果您正在使用Activity 3}})。

Toolbar中,设置Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar);

onCreateOptionsMenu()

并覆盖@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_menu, menu); return true; } 以扩充先前定义的菜单资源:

onOptionsItemSelected()

您可以覆盖MenuItem来定义@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_sign_out: { // do your sign-out stuff break; } // case blocks for other MenuItems (if any) } return true; } 的onClick行为:

body {
  display: flex;
}

body * {
  margin: 0;
}

#left{
  width: 15%;
  background-color: blue;
}

#right{
  width: 85%;
  background-color: red;
}

答案 1 :(得分:3)

清单文件中的

声明

android:theme="@style/AppTheme.NoActionBar"
像这样:

<activity
    android:name=".ActivityName"
    android:label="@string/label"
    android:theme="@style/AppTheme.NoActionBar" />

并将其添加到您的风格中:

 <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

并在Activity onCreate()中调用它:

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

在活动中覆盖此方法:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.product_list, menu);
    //U can find item set icon and stuff...
    MenuItem item= menu.findItem(R.id.action_search);

    return true;
}

并为溢出菜单声明您的菜单:

  <?xml version="1.0" encoding="utf-8"?>
<menu >
    <group>
        <item
            android:id="@+id/sign_out"
            android:title="@string/sign_out" />
        <item
            android:id="@+id/about"
            android:title="@string/about" />
    </group>
</menu>

并且对于句柄项目选择,请调用此

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) { 
       case R.id.sign_out:
       //do stuff
           break;
           }  
        return super.onOptionsItemSelected(item);
    }

完成:))

答案 2 :(得分:-1)

简单操作将此代码复制到MainActivet`

git cherry-pick <SHA of your commit>

现在为此菜单名称创建目录文件依赖于Android_Studio-&gt; app Folder-&gt; Right_Click-&gt; New-&gt; Directory-&gt;立即输入名称菜单使用menu2.xml名称

在其中创建一个xml文件

并在menu2.xml文件中通过此代码

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            Group gp=(Group)findViewById(R.id.order);

            return true;
        }

        return super.onOptionsItemSelected(item);
    }`

如果有任何查询请发短信给我