SlidingMenu LeftAndRightActivity使用说明

在github的SlidingMenu的例子中有一个LeftAndRightAcitivity,可以实现类似网易客户端的左右互滑的效果,学渣在看了代码后,基本会用这个例子了,希望能够帮到大家。

LeftAndRightAcitivity 的继承关系

LeftAndRightAcitivity继承自BaseActivity,这个在例子中也有,而BaseActivity继承自SlidingFragmentActivity,如图1所示:


图1

SlidingFragmentActivity 和 SlidingMenu

在1中的继承关系中,最顶部的是SlidingFragmentActivity,这个算是这个开源项目中的底层的一个类,而这个类的关键在声明了一个SlidingActivityHelper的对象

private SlidingActivityHelper mHelper;

而这个 SlidingActivityHelper是一个包含很多域的类,其中一个就是SlidingMenu,
public class SlidingActivityHelper {

	private Activity mActivity;

	private SlidingMenu mSlidingMenu;
...
}

SlidingMenu就是这个开源项目的核心了,所有的我们看到的滑动的页面都是由这个SlidingMenu实现的,SlidingMenu比较复杂,学渣也没细看,只是看了一下使用。简单来讲,你需要在Activity里声明一个SlidingMenu对象,然后对这个对象的属性进行设置就可以了,github上作者有描述,如图2所示:


继承了SlidingFragmentActivity 后,直接设置setBehindContentView(),就可以对自带的SlidingMenu进行设置布局,SlidingMenu有两个menu可以设置,可以用来设置左边页面和右边的页面。用SlidingFragmentActivity 也是一样的。BaseActivity继承自SlidingFragmentActivity,因此可以采用这种方法设置一个滑动页面。

下面是BaseActivity对SlidingMenu属性的设置。

                SlidingMenu sm = new SlidingMenu();
		sm.setShadowWidthRes(R.dimen.shadow_width);
		sm.setShadowDrawable(R.drawable.shadow);
		sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
		sm.setFadeDegree(0.35f);
		sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

3 LeftAndRightActivity

该类继承自BaseActivity,因此自带一个SlidingMenu,要想实现左右滑动,需要继续添加一个SlidingMenu,采用

getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);
		getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);
		getSupportFragmentManager()
		.beginTransaction()
		.replace(R.id.menu_frame_two, new SampleListFragment())
		.commit();

就可以把右面的SlidingMenu也加入进来,进而实现左右互滑动。那么LeftAndRightActivity就有两个SlidingMenu,第一个继承自BaseActivity,采用setBehindContentView(R.layout.menu_frame)进行设置页面,第二个来自自己定义的getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two),如果想自己定制左右滑动的页面时,需要自己定义两个Fragement,一个用来replace  R.id.content_frame(R.layout.menu_frame 的主id),另一个replace menu_frame_two(R.layout.menu_frame_two 的主id),这样就可以做到定制了。

两个slidingMenu如何控制呢,可以用下面的代码实现,利用到了ActionBar的功能,大家需要先看看这个。

@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
	        //显示左边滑动页面
			getSlidingMenu().showMenu();
			return true;
		// 显示右边滑动页面
		case R.id.action_settings:
			getSlidingMenu().showSecondaryMenu();
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
代码很简单,R.id.home代表按了logo键,通过设置icon还能改变logo的图片,R.id.action_setting代表右侧滑动页面的按钮。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我作为一个语言模型,无法提供图片输出。但是,我可以为您提供实现该功能的大致步骤和代码示例。 1. 创建一个HorizontalScrollView的子类,用于实现侧滑菜单: ```java public class SlidingMenu extends HorizontalScrollView { private int mMenuWidth; //菜单栏的宽度 private boolean isOpen; //菜单栏是否已经展开 public SlidingMenu(Context context, AttributeSet attrs) { super(context, attrs); //初始化菜单栏的宽度 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); mMenuWidth = outMetrics.widthPixels * 3 / 5; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //设置菜单栏的宽度 View menu = getChildAt(0); menu.getLayoutParams().width = mMenuWidth; super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); //将菜单栏隐藏起来 if (changed) { this.scrollTo(mMenuWidth, 0); } } //展开菜单栏 public void openMenu() { if (!isOpen) { this.smoothScrollTo(0, 0); isOpen = true; } } //隐藏菜单栏 public void closeMenu() { if (isOpen) { this.smoothScrollTo(mMenuWidth, 0); isOpen = false; } } //切换菜单栏的展开状态 public void toggleMenu() { if (isOpen) { closeMenu(); } else { openMenu(); } } } ``` 2. 在布局文件中使用SlidingMenu控件,并添加菜单项和按钮: ```xml <com.example.slidingmenu.SlidingMenu android:id="@+id/sliding_menu" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/ic_menu_header"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="菜单项1" android:padding="10dp" android:onClick="onClickMenuItem"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="菜单项2" android:padding="10dp" android:onClick="onClickMenuItem"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="菜单项3" android:padding="10dp" android:onClick="onClickMenuItem"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="菜单项4" android:padding="10dp" android:onClick="onClickMenuItem"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#CCCCCC"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <ImageView android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_close"/> <ImageView android:id="@+id/btn_qrcode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:src="@drawable/ic_qrcode"/> </RelativeLayout> </LinearLayout> </com.example.slidingmenu.SlidingMenu> ``` 3. 在Activity中添加按钮监听器,实现菜单的展开和隐藏: ```java public class MainActivity extends AppCompatActivity { private SlidingMenu mSlidingMenu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSlidingMenu = findViewById(R.id.sliding_menu); //添加“菜单”按钮的监听器 Button btnMenu = findViewById(R.id.btn_menu); btnMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.toggleMenu(); } }); //添加“关闭”按钮的监听器 ImageView btnClose = findViewById(R.id.btn_close); btnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.closeMenu(); } }); //添加“二维码”按钮的监听器 ImageView btnQrcode = findViewById(R.id.btn_qrcode); btnQrcode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.closeMenu(); //跳转到二维码页面 Intent intent = new Intent(MainActivity.this, QrcodeActivity.class); startActivity(intent); } }); } //菜单项的点击事件 public void onClickMenuItem(View view) { TextView tv = (TextView) view; String itemName = tv.getText().toString(); Toast.makeText(this, "点击了菜单项:" + itemName, Toast.LENGTH_SHORT).show(); mSlidingMenu.closeMenu(); } } ``` 4. 在主页面中使用Fragment实现页面切换: ```java public class MainActivity extends AppCompatActivity { private SlidingMenu mSlidingMenu; private Fragment1 mFragment1; private Fragment2 mFragment2; private Fragment3 mFragment3; private Fragment4 mFragment4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSlidingMenu = findViewById(R.id.sliding_menu); //添加“菜单”按钮的监听器 Button btnMenu = findViewById(R.id.btn_menu); btnMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.toggleMenu(); } }); //添加“关闭”按钮的监听器 ImageView btnClose = findViewById(R.id.btn_close); btnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.closeMenu(); } }); //添加“二维码”按钮的监听器 ImageView btnQrcode = findViewById(R.id.btn_qrcode); btnQrcode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSlidingMenu.closeMenu(); //跳转到二维码页面 Intent intent = new Intent(MainActivity.this, QrcodeActivity.class); startActivity(intent); } }); //初始化Fragment mFragment1 = new Fragment1(); mFragment2 = new Fragment2(); mFragment3 = new Fragment3(); mFragment4 = new Fragment4(); //默认显示第一个Fragment getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mFragment1).commit(); //添加四个按钮的监听器,实现页面切换 Button btn1 = findViewById(R.id.btn_1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mFragment1).commit(); } }); Button btn2 = findViewById(R.id.btn_2); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mFragment2).commit(); } }); Button btn3 = findViewById(R.id.btn_3); btn3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mFragment3).commit(); } }); Button btn4 = findViewById(R.id.btn_4); btn4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mFragment4).commit(); } }); } //菜单项的点击事件 public void onClickMenuItem(View view) { TextView tv = (TextView) view; String itemName = tv.getText().toString(); Toast.makeText(this, "点击了菜单项:" + itemName, Toast.LENGTH_SHORT).show(); mSlidingMenu.closeMenu(); } } ``` 以上是大致的实现步骤和代码示例。由于没有素材和布局细节,可能会存在一些问题。如果您在实现过程中遇到了问题,可以在评论区提问,我会尽力帮助您解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值