全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android动态修改ToolBar的Menu菜单示例

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小时内与您取得联系。