如何将溢出菜单添加到工具栏?
How to add overflow menu to Toolbar?
我正在尝试在我的应用程序中使用 Android ActionBar
,并且有一个隐藏在溢出菜单中的选项。
那里有很多文档,但令人困惑,因为其中大部分仅与 Android 的非常旧版本相关,并且当您尝试应用相同的概念时,它们不再起作用或工作方式不同。
这是我的 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);
我也试过从 onCreateOptionsMenu()
扩展一个菜单 xml 文件,但这也没有给我想要的结果。
在 res/menu 资源文件夹中为您的 Toolbar
定义一个 Menu
,例如:
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
如果您使用Material Components).
在您的 Activity
中,设置您的 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
(s):
的 onClick 行为
@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;
}
在清单文件中声明
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);
在 activity 中覆盖此方法:
@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);
}
完成:)
简单操作将此代码复制到您的 MainActivet`
@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);
}`
现在为菜单名称创建目录文件继续Android_Studio->应用程序文件夹->Right_Click->新建->目录->现在输入名称菜单创建一个xml文件里面有 menu2.xml 名字
并将此代码添加到 menu2.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">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"
android:icon="@android:drawable/ic_input_add"
/>
</menu>
如有任何疑问请发短信给我
我正在尝试在我的应用程序中使用 Android ActionBar
,并且有一个隐藏在溢出菜单中的选项。
那里有很多文档,但令人困惑,因为其中大部分仅与 Android 的非常旧版本相关,并且当您尝试应用相同的概念时,它们不再起作用或工作方式不同。
这是我的 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);
我也试过从 onCreateOptionsMenu()
扩展一个菜单 xml 文件,但这也没有给我想要的结果。
在 res/menu 资源文件夹中为您的 Toolbar
定义一个 Menu
,例如:
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
如果您使用Material Components).
在您的 Activity
中,设置您的 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
(s):
@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;
}
在清单文件中声明
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);
在 activity 中覆盖此方法:
@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);
}
完成:)
简单操作将此代码复制到您的 MainActivet`
@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);
}`
现在为菜单名称创建目录文件继续Android_Studio->应用程序文件夹->Right_Click->新建->目录->现在输入名称菜单创建一个xml文件里面有 menu2.xml 名字
并将此代码添加到 menu2.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">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"
android:icon="@android:drawable/ic_input_add"
/>
</menu>
如有任何疑问请发短信给我