Android動(dòng)態(tài)修改ToolBar的Menu菜單示例
Android動(dòng)態(tài)修改ToolBar的Menu菜單
效果圖
實(shí)現(xiàn)
實(shí)現(xiàn)很簡(jiǎn)單,就是一個(gè)具有3個(gè)Action的Menu,在我們滑動(dòng)到不同狀態(tài)的時(shí)候,把對(duì)應(yīng)的Action隱藏了。
開始上貨
Menu
Menu下添加3個(gè)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="設(shè)置" app:showAsAction="ifRoom" /> </menu>
重寫onPrepareOptionsMenu方法
用來(lái)根據(jù)ViewPager顯示頁(yè)面控制Menu顯示的Item
Demo里我用的是ViewPager滑動(dòng)來(lái)控制,可以根據(jù)自己需求,不過大多數(shù)都是判斷ViewPager吧。
@Override public boolean onPrepareOptionsMenu(Menu menu) { // 動(dòng)態(tài)設(shè)置ToolBar狀態(tài) 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點(diǎn)擊
@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(), "設(shè)置", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); }
監(jiān)聽ViewPager滑動(dòng),改變Menu狀態(tài)(重點(diǎn))
調(diào)用invalidateOptionsMenu();方法從新加載Menu,即回調(diào)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默認(rèn)創(chuàng)建的帶有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) { // 動(dòng)態(tài)設(shè)置ToolBar狀態(tài) 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(), "設(shè)置", 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; } } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用SpannableString和ImageSpan在textview中插入圖片的方法
這篇文章主要為大家詳細(xì)介紹了利用SpannableString和ImageSpan在textview中插入圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android?Activity生命周期調(diào)用的理解
大家好。本篇文章主要講的是Android?Activity生命周期調(diào)用的理解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12Android Studio和Gradle使用不同位置JDK的問題解決
這篇文章主要介紹了Android Studio和Gradle使用不同位置JDK的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Android原生態(tài)實(shí)現(xiàn)分享轉(zhuǎn)發(fā)功能實(shí)例
大家好,本篇文章主要講的是Android原生態(tài)實(shí)現(xiàn)分享轉(zhuǎn)發(fā)功能實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12Android沉浸式狀態(tài)欄的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android沉浸式狀態(tài)欄的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09Android實(shí)現(xiàn)dialog的3D翻轉(zhuǎn)示例
這篇文章主要介紹了Android實(shí)現(xiàn)dialog的3D翻轉(zhuǎn)示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08