转 android 侧滑实现
2016-07-19 00:31
459 查看
本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。
效果如下:
主Activity代码:
[java] view plain copy
print?
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
[java] view plain copy
print?
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开源库。
Demo下载地址:http://download.csdn.net/download/wwj_748/8184889
效果如下:
主Activity代码:
[java] view plain copy
print?
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;
}
}
}
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
[java] view plain copy
print?
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);
}
}
}
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开源库。
Demo下载地址:http://download.csdn.net/download/wwj_748/8184889
相关文章推荐
- Android NDK : 基本类型,字符串与数组
- android MVP 模式介绍与实战
- Android百度地图(二)结合方向传感器我们自己定位哪里走
- android CoordinatorLayout使用
- android 开发之画布初步探索
- Android App应用启动分析与优化
- Android五布局——线性布局LinearLayout
- Android 验证码倒计时 与 getDrawable(int) 方法过期问题
- 直接调用android原生接口实现点击直接拨打电话功能
- Android String占位符功能[笔记]
- android 显示特殊符号[笔记]
- android中sqlite数据库的基本使用和添加多张表
- 完美解决 Android 6 java.lang.AbstractMethodError
- Android 好推荐
- Android Studio调试设置的断点无效
- Android SharedPreferences源码分析
- Material Design系列,自定义Behavior实现Android知乎首页
- Android-Context
- 【Android】34、基本布局——LinearLayout
- Android自定义ProgressDialog进度等待框