实现很简单,就是一个具有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>
用来根据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);
}
@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);
}
调用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) {}
});
就是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小时内删除。
留言与评论(共有 0 条评论) |