Android动态修改ToolBar的Menu菜单

阅读: 评论:0

Android动态修改ToolBar的Menu菜单

Android动态修改ToolBar的Menu菜单

Android动态修改ToolBar的Menu菜单

效果图

实现

实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了。
开始上货

Menu下添加3个Item

<menu xmlns:android=""xmlns:app=""xmlns:tools=""tools:context="application.MainActivity"><itemandroid:id="@+id/search_button"android:icon="@mipmap/navigation_icon_search"android:orderInCategory="100"android:title="搜索"app:showAsAction="ifRoom" /><itemandroid:id="@+id/scan_button"android:icon="@mipmap/navigation_icon_sweep"android:orderInCategory="100"android:title="扫描"app:showAsAction="ifRoom" /><itemandroid: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 (CurrentItem()) {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;}PrepareOptionsMenu(menu);
}

Item点击

@Override
public boolean onOptionsItemSelected(MenuItem item) {int id = ItemId();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;}
    OptionsItemSelected(item);
}

监听ViewPager滑动,改变Menu状态(重点)

调用invalidateOptionsMenu();方法从新加载Menu,即回调onPrepareOptionsMenu方法

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {// getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);invalidateOptionsMenu();}@Overridepublic void onPageScrollStateChanged(int state) {}
});

Code(参考)

就是Android Studio默认创建的带有ViewPager的Demo,

package application;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;@Overrideprotected void onCreate(Bundle savedInstanceState) {Create(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(lbar);setSupportActionBar(toolbar);mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());mViewPager = (ViewPager) findViewById(ainer);mViewPager.setAdapter(mSectionsPagerAdapter);mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {// getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);invalidateOptionsMenu();}@Overridepublic void onPageScrollStateChanged(int state) {}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().u.menu_main, menu);return true;}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {// 动态设置ToolBar状态switch (CurrentItem()) {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;}PrepareOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = ItemId();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;}OptionsItemSelected(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;}@Overridepublic 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);}@Overridepublic Fragment getItem(int position) {wInstance(position + 1);}@Overridepublic int getCount() {return 3;}@Overridepublic CharSequence getPageTitle(int position) {switch (position) {case 0:return "SECTION 1";case 1:return "SECTION 2";case 2:return "SECTION 3";}return null;}}
}

本文发布于:2024-02-04 13:08:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170707962655847.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:菜单   动态   Android   Menu   ToolBar
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23