Android UI实现SlidingMenu侧滑菜单效果

本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。
效果如下:

主Activity代码:

package com.infzm.slidingmenu.demo; 

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView; 

import com.infzm.slidingmenu.demo.fragment.LeftFragment;
import com.infzm.slidingmenu.demo.fragment.TodayFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; 

/**
 * @date 2014/11/14
 * @author wuwenjie
 * @description 主界面
 */
public class MainActivity extends SlidingFragmentActivity implements
    OnClickListener { 

  private ImageView topButton;
  private Fragment mContent;
  private TextView topTextView; 

  @Override
  public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initSlidingMenu(savedInstanceState); 

    topButton = (ImageView) findViewById(R.id.topButton);
    topButton.setOnClickListener(this);
    topTextView = (TextView) findViewById(R.id.topTv);
  } 

  /**
   * 初始化侧边栏
   */
  private void initSlidingMenu(Bundle savedInstanceState) {
    // 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
    if (savedInstanceState != null) {
      mContent = getSupportFragmentManager().getFragment(
          savedInstanceState, "mContent");
    } 

    if (mContent == null) {
      mContent = new TodayFragment();
    } 

    // 设置左侧滑动菜单
    setBehindContentView(R.layout.menu_frame_left);
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.menu_frame, new LeftFragment()).commit(); 

    // 实例化滑动菜单对象
    SlidingMenu sm = getSlidingMenu();
    // 设置可以左右滑动的菜单
    sm.setMode(SlidingMenu.LEFT);
    // 设置滑动阴影的宽度
    sm.setShadowWidthRes(R.dimen.shadow_width);
    // 设置滑动菜单阴影的图像资源
    sm.setShadowDrawable(null);
    // 设置滑动菜单视图的宽度
    sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    // 设置渐入渐出效果的值
    sm.setFadeDegree(0.35f);
    // 设置触摸屏幕的模式,这里设置为全屏
    sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    // 设置下方视图的在滚动时的缩放比例
    sm.setBehindScrollScale(0.0f); 

  } 

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    getSupportFragmentManager().putFragment(outState, "mContent", mContent);
  } 

  /**
   * 切换Fragment
   *
   * @param fragment
   */
  public void switchConent(Fragment fragment, String title) {
    mContent = fragment;
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.content_frame, fragment).commit();
    getSlidingMenu().showContent();
    topTextView.setText(title);
  } 

  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.topButton:
      toggle();
      break;
    default:
      break;
    }
  } 

} 

侧边栏菜单Fragment

package com.infzm.slidingmenu.demo.fragment; 

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; 

import com.infzm.slidingmenu.demo.MainActivity;
import com.infzm.slidingmenu.demo.R;
/**
 * @date 2014/11/14
 * @author wuwenjie
 * @description 侧边栏菜单
 */
public class LeftFragment extends Fragment implements OnClickListener{
  private View todayView;
  private View lastListView;
  private View discussView;
  private View favoritesView;
  private View commentsView;
  private View settingsView; 

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  } 

  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
  } 

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.layout_menu, null);
    findViews(view); 

    return view;
  } 

  public void findViews(View view) {
    todayView = view.findViewById(R.id.tvToday);
    lastListView = view.findViewById(R.id.tvLastlist);
    discussView = view.findViewById(R.id.tvDiscussMeeting);
    favoritesView = view.findViewById(R.id.tvMyFavorites);
    commentsView = view.findViewById(R.id.tvMyComments);
    settingsView = view.findViewById(R.id.tvMySettings); 

    todayView.setOnClickListener(this);
    lastListView.setOnClickListener(this);
    discussView.setOnClickListener(this);
    favoritesView.setOnClickListener(this);
    commentsView.setOnClickListener(this);
    settingsView.setOnClickListener(this);
  } 

  @Override
  public void onDestroyView() {
    super.onDestroyView();
  } 

  @Override
  public void onDestroy() {
    super.onDestroy();
  } 

  @Override
  public void onClick(View v) {
    Fragment newContent = null;
    String title = null;
    switch (v.getId()) {
    case R.id.tvToday: // 今日
      newContent = new TodayFragment();
      title = getString(R.string.today);
      break;
    case R.id.tvLastlist:// 往期列表
      newContent = new LastListFragment();
      title = getString(R.string.lastList);
      break;
    case R.id.tvDiscussMeeting: // 讨论集会
      newContent = new DiscussFragment();
      title = getString(R.string.discussMeetting);
      break;
    case R.id.tvMyFavorites: // 我的收藏
      newContent = new MyFavoritesFragment();
      title = getString(R.string.myFavorities);
      break;
    case R.id.tvMyComments: // 我的评论
      newContent = new MyCommentsFragment();
      title = getString(R.string.myComments);
      break;
    case R.id.tvMySettings: // 设置
      newContent = new MySettingsFragment();
      title = getString(R.string.settings);
      break;
    default:
      break;
    }
    if (newContent != null) {
      switchFragment(newContent, title);
    }
  } 

  /**
   * 切换fragment
   * @param fragment
   */
  private void switchFragment(Fragment fragment, String title) {
    if (getActivity() == null) {
      return;
    }
    if (getActivity() instanceof MainActivity) {
      MainActivity fca = (MainActivity) getActivity();
      fca.switchConent(fragment, title);
    }
  } 

}

上面是核心代码,引入SlidingMenu开源库。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android标题栏上添加多个Menu按钮的实例

    Android标题栏上添加多个Menu按钮的实例 前言: 最近项目中碰到要在Android Menu旁边再添加一个按钮,而不是点击menu按钮然后在弹出一些选项. MainActivity代码: public class MainActivity extends Activity { private static final int MENU_CONFIRM = 17; @Override protected void onCreate(Bundle savedInstanceState) {

  • Android制作微信app顶部menu菜单(ActionBar)

    使用微信APP的小伙伴对于微信的ActionBar一定有印象,今天就带领大家一起实现以下这个效果. 第一步打开我们的开发工具,这里我使用的是Eclipse+ADT插件,然后创建我们的工程,这里选择Android的最低版本号为3.0或以上. 然后开始我们的"抄袭",首先打开我们微信,我们看到,顶部标题部分,分为左右两部分,左侧为"微信"两字,右侧则为搜索按钮+更多按钮,点击搜索按钮,会出现一个文本输入框.点击更多按钮,则会出现隐藏的menu菜单,分为:添加好友.发起群

  • Android 中menu同时显示图标和文字的实现

    Android 中menu同时显示图标和文字的实现 前言: Activity中的menu条目,在设置其showAsAction="never"时,默认只显示文字title,而不会显示图标icon,可以在Activity中重写onMenuOpened(),通过反射使其图标可见. 实现效果图: // 让菜单同时显示图标和文字 @Override public boolean onMenuOpened(int featureId, Menu menu) { if (menu != null)

  • Android中menu使用详解

    Menu(菜单)是Android中一定会使用的模块,每个Android项目都会用到Menu来给用户起到选择和导航的作用,提升用户体验,下面通过本文给大家分享android 中menu使用,需要的朋友一起看看吧 很多activity界面中都存在一个菜单栏,就是点击右上角的一个按钮的时候会出现一个下拉列表差不多的东西,这个功能的实现其实只需要下面的两步,每一个activity都可以拥有自己独一无二的menu,具体的格式可以自己进行定义,详细的创建步骤如下 ①在res下的menu中创建file_men

  • Android学习教程之圆形Menu菜单制作方法(1)

    本文实例为大家分享了Android圆形菜单的使用方法,供大家参考,具体内容如下 MainActivity.java代码: package siso.handlerdemo; import android.app.NotificationManager; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.vi

  • 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" xml

  • Android中PopupMenu组件的使用实例

    最近学习研究了一下Android中PopupMenu组件的使用,发现很实用,所以留个笔记留作日后查询 估计很多人遇到过这种场景: 要求弹出的PopupWindow里面是一个列表,我们使用时都是在里面套个ListView或RecyclerView ,现在我们不需要在做这样繁琐的工作了. 在官方android.support.v7.widget 包下提供的 PopupMenu 组件,已经被越来越多的项目所采用.我们先看一下几个 app 的效果: 这是一个非常轻量化的上下文菜单组件,简洁.使用方便.

  • Android编程实现自定义PopupMenu样式示例【显示图标与设置RadioButton图标】

    本文实例讲述了Android编程实现自定义PopupMenu样式.分享给大家供大家参考,具体如下: PopupMenu是Android中一个十分轻量级的组件.与PopupWindow相比,PopupMenu的可自定义的能力较小,但使用更加方便. 先上效果图: 本例要实现的功能如下: 1.强制显示菜单项的图标. 默认状态下,PopupMenu的图标是不显示的,并且Android没有为我们开放任何API去设置它的显示状态.为了显示菜单项的图标,可以自己重写PopupMenu并修改相关属性,也可以直接

  • Android UI实现SlidingMenu侧滑菜单效果

    本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment. 效果如下: 主Activity代码: package com.infzm.slidingmenu.demo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.View; import android.view.View.OnClickListener; import android

  • Android中DrawerLayout实现侧滑菜单效果

    众所周知,android里面我们很熟悉的一个功能,侧滑菜单效果在以前我们大部分都是用的slidingmenu这个开源框架,自从谷歌官方新出的一个DrawerLayout控件之后,越来越多的应用开始使用谷歌的官方的控件写这个效果了. 话不多说,先来发图以表我滴诚意: 开始写代码 DrawerLayout 是v4包里面的,所以项目里面需要添加v4包,具体怎么添加就不多说了, NavigationView需要在build.gradle里面添加compile 'com.android.support:d

  • Android开源组件SlidingMenu侧滑菜单使用介绍

    现在很多android应用都有侧滑菜单,效果很不错. GitHub上有SlidingMenu的开源库,使用起来很方便. SlidingMenu GitHub地址:https://github.com/jfeinstein10/SlidingMenu.GitHub上说,Sliding结合ActionBarSherlock使用功能可以更丰富,ActionBarSherlock GitHub地址:https://github.com/JakeWharton/ActionBarSherlock 附csd

  • Android自定义控件简单实现侧滑菜单效果

    侧滑菜单在很多应用中都会见到,最近QQ5.0侧滑还玩了点花样~~对于侧滑菜单,一般大家都会自定义ViewGroup,然后隐藏菜单栏,当手指滑动时,通过Scroller或者不断的改变leftMargin等实现:多少都有点复杂,完成以后还需要对滑动冲突等进行处理~~今天给大家带来一个简单的实现,史上最简单有点夸张,但是的确是我目前遇到过的最简单的一种实现~~~ 1.原理分析 既然是侧滑,无非就是在巴掌大的屏幕,塞入大概两巴掌大的布局,需要滑动可以出现另一个,既然这样,大家为啥不考虑使用Android

  • Android使用DrawerLayout实现侧滑菜单效果

    一.概述 DrawerLayout是一个可以方便的实现Android侧滑菜单的组件,我最近开发的项目中也有一个侧滑菜单的功能,于是DrawerLayout就派上用场了.如果你从未使用过DrawerLayout,那么本篇博客将使用一个简单的案例带你迅速掌握DrawerLayout的用法. 二.效果图 三.代码实现 主布局activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

  • Android自定义ViewGroup实现侧滑菜单

    目录 前言 一.常用的几种交互方式 1.1 事件的拦截处理 1.2 自行处理事件的几种方式 1.3 子View的滚动与协调交互 1.4 ViewGroup之间的嵌套与协调效果 二.ViewDragHelper的侧滑菜单实现 三.回调与封装 后记 前言 前文我们理解了ViewGroup的测量与布局,但是并没有涉及到多少的交互逻辑,而 ViewGroup 的交互逻辑说起来范围其实是比较大的.从哪开始说起呢? 我们暂且把 ViewGroup 的交互分为几块知识区, 事件的拦截. 事件的处理(内部又分不

  • Android_UI 仿QQ侧滑菜单效果的实现

    相信大家对QQ侧滑菜单的效果已经不陌生了吧,侧滑进入个人头像一侧,进行对头像的更改,我的收藏,QQ钱包,我的文件等一系列的操作,今天呢,主要是实现进入侧滑菜单的这一效果原理进行分析. 主要思路分析 1.首先写一个SlideMenu 继承一个帧布局FrameLayout ,因为如果继承自ViewGroup的话,需要我们自己来实现onMeasure方法,而该方法的实现一般比较麻烦且没有必要,所以选择继承系统的已有的控件FrameLayout,不用其他控件是因为FrameLayout最轻量级 2.在布

  • Android自定义VIew实现卫星菜单效果浅析

     一 概述: 最近一直致力于Android自定义VIew的学习,主要在看<android群英传>,还有CSDN博客鸿洋大神和wing大神的一些文章,写的很详细,自己心血来潮,学着写了个实现了类似卫星效果的一个自定义的View,分享到博客上,望各位指点一二.写的比较粗糙,见谅.(因为是在Linux系统下写的,效果图我直接用手机拍的,难看,大家讲究下就看个效果,勿喷). 先来看个效果图,有点不忍直视: 自定义VIew准备: (1)创建继承自View的类; (2)重写构造函数; (3)定义属性. (

  • Android实现伸缩弹力分布菜单效果的示例

    这两天无意间看到一园友的博文实现Path2.0中绚丽的的旋转菜单,感觉效果不错,但是发现作者没有处理线程安全的问题,所以在这里我修正了下,并且改善下部分功能.今天发布这篇文章的目的是希望能在Android用户体验上提出一些相关的解决方案,方便我们在开发项目或产品时增强用户体验效果,当然也希望能起到抛砖引玉的作用. =废话不多说,还是老规矩,先让我们看一下实现的效果图: =在上图中,我将菜单弹出的效果设置成直线型,最终的弹出或汇总点在下面的红色按钮中. 它的实现原理是设置动画的同时并利用动画中的插

  • vue+swiper实现侧滑菜单效果

    本文实例为大家分享了vue swiper实现侧滑菜单效果的具体代码,供大家参考,具体内容如下 先上效果图: 这个左右滑动以及上下滑动主要使用了Swiper的轮播功能,首先是该自定义组件的代码: <template> <div class="s-slider"> <swiper :options="horizontalSwiperOptions" ref="horizontalSwiper"> <swipe

随机推荐