Android动态修改ToolBar的Menu菜单

效果图
实现
实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了。
开始上货
Menu
Menu下添加3个Item
<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="com.kongqw.myapplication.MainActivity">
<item
android:id="@+id/search_button"
android:icon="@mipmap/navigation_icon_search"
android:orderInCategory="100"
android:title="搜索"
app:showAsAction="ifRoom" />
<item
android:id="@+id/scan_button"
android:icon="@mipmap/navigation_icon_sweep"
android:orderInCategory="100"
android:title="扫描"
app:showAsAction="ifRoom" />
<item
android:id="@+id/setting_button"
android:icon="@mipmap/titlebar_icon_settings_normal"
android:orderInCategory="100"
android:title="设置"
app:showAsAction="ifRoom" />
</menu>
重写onPrepareOptionsMenu方法
用来根据ViewPager显示页面控制Menu显示的Item
Demo里我用的是ViewPager滑动来控制,可以根据自己需求,不过大多数都是判断ViewPager吧。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// 动态设置ToolBar状态
switch (mViewPager.getCurrentItem()) {
case 0:
menu.findItem(R.id.search_button).setVisible(true);
menu.findItem(R.id.scan_button).setVisible(true);
menu.findItem(R.id.setting_button).setVisible(false);
break;
case 1:
menu.findItem(R.id.search_button).setVisible(false);
menu.findItem(R.id.scan_button).setVisible(false);
menu.findItem(R.id.setting_button).setVisible(false);
break;
case 2:
menu.findItem(R.id.search_button).setVisible(false);
menu.findItem(R.id.scan_button).setVisible(false);
menu.findItem(R.id.setting_button).setVisible(true);
break;
}
return super.onPrepareOptionsMenu(menu);
}
Item点击
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.search_button) {
Toast.makeText(getApplicationContext(), "搜索", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.scan_button) {
Toast.makeText(getApplicationContext(), "扫描", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.setting_button) {
Toast.makeText(getApplicationContext(), "设置", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
监听ViewPager滑动,改变Menu状态(重点)
调用invalidateOptionsMenu();方法从新加载Menu,即回调onPrepareOptionsMenu方法
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
invalidateOptionsMenu();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Code(参考)
就是Android Studio默认创建的带有ViewPager的Demo,
package com.kongqw.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
invalidateOptionsMenu();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// 动态设置ToolBar状态
switch (mViewPager.getCurrentItem()) {
case 0:
menu.findItem(R.id.search_button).setVisible(true);
menu.findItem(R.id.scan_button).setVisible(true);
menu.findItem(R.id.setting_button).setVisible(false);
break;
case 1:
menu.findItem(R.id.search_button).setVisible(false);
menu.findItem(R.id.scan_button).setVisible(false);
menu.findItem(R.id.setting_button).setVisible(false);
break;
case 2:
menu.findItem(R.id.search_button).setVisible(false);
menu.findItem(R.id.scan_button).setVisible(false);
menu.findItem(R.id.setting_button).setVisible(true);
break;
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.search_button) {
Toast.makeText(getApplicationContext(), "搜索", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.scan_button) {
Toast.makeText(getApplicationContext(), "扫描", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.setting_button) {
Toast.makeText(getApplicationContext(), "设置", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
public static class PlaceholderFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public PlaceholderFragment() {
}
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
TextView textView = (TextView) rootView.findViewById(R.id.section_label);
textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
return rootView;
}
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PlaceholderFragment.newInstance(position + 1);
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "SECTION 1";
case 1:
return "SECTION 2";
case 2:
return "SECTION 3";
}
return null;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# toolbar
# 动态修改menu
# android
# 动态
# Android动态添加menu菜单的简单方法
# 详解Android中的Menu菜单键
# Android创建Menu菜单实例
# Android开发之menu菜单
# Android动态更新Menu菜单的实现过程
# 的是
# 都是
# 我用
# 很简单
# 重写
# 可以根据
# 回调
# 大家多多
# 加载
# mViewPager
# switch
# boolean
# getCurrentItem
# setVisible
# findItem
# case
# onPrepareOptionsMenu
# ViewPager
# Demo
# titlebar_icon_settings_normal
相关文章:
盘锦网站制作公司,盘锦大洼有多少5G网站?
C++如何使用std::optional?(处理可选值)
建站之星如何快速生成多端适配网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何选择CMS系统实现快速建站与SEO优化?
如何通过PHP快速构建高效问答网站功能?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何通过VPS建站实现广告与增值服务盈利?
如何正确选择百度移动适配建站域名?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
网站制作壁纸教程视频,电脑壁纸网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
详解jQuery中基本的动画方法
如何通过商城自助建站源码实现零基础高效建站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
大连网站设计制作招聘信息,大连投诉网站有哪些?
jQuery 常见小例汇总
如何在建站宝盒中设置产品搜索功能?
如何确保西部建站助手FTP传输的安全性?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
设计网站制作公司有哪些,制作网页教程?
如何通过IIS搭建网站并配置访问权限?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
电商网站制作公司有哪些,1688网是什么意思?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
网站微信制作软件,如何制作微信链接?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
建站三合一如何选?哪家性价比更高?
建站主机选购指南与交易推荐:核心配置解析
,想在网上投简历,哪几个网站比较好?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
已有域名如何快速搭建专属网站?
香港服务器租用费用高吗?如何避免常见误区?
清除minerd进程的简单方法
如何通过FTP服务器快速搭建网站?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何快速登录WAP自助建站平台?
微信小程序 input输入框控件详解及实例(多种示例)
linux top下的 minerd 木马清除方法
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何高效利用亚马逊云主机搭建企业网站?
如何快速生成ASP一键建站模板并优化安全性?
宝塔Windows建站如何避免显示默认IIS页面?
高性价比服务器租赁——企业级配置与24小时运维服务
如何在香港免费服务器上快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。