SlidingMenu(侧滑框)的使用、ViewPager冲突处理

原创 2016年05月30日 21:59:50

代码下载详见
SlidingMenu+ViewPager冲突解决
http://download.csdn.net/detail/zhiyuan0932/9501092
SlidingMenu简单配置
http://download.csdn.net/detail/zhiyuan0932/9500675

下载libary

导包

  • 将所下载的libary包导入到项目中(该地址下的工具包支持Eclipse)

这里写图片描述

创建自己的项目

  • 在这提供两种方式来使用SlidingMenu
  • 第一种写法—直接实例化SlidingMenu,逻辑一般实现在activity中
<code class="language-bash hljs  has-numbering">    private void <span class="hljs-function"><span class="hljs-title">initSlidingMenu</span></span>() {
        // 初始化SlidingMenu对象
        SlidingMenu menu = new SlidingMenu(this);
        // 设置侧滑方式为左侧侧滑
        menu.setMode(SlidingMenu.LEFT);
        /*
         * 设置拖拽模式 SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效
         * SlidingMenu.TOUCHMODE_MARGIN 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE
         * 不响应触摸事件
         */
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        // 设置阴影的宽度
        menu.setShadowWidthRes(R.dimen.shadow_width);
        // 设置阴影的图片
        menu.setShadowDrawable(R.drawable.shadow);
        // 设置sldingMenu的剩余大小---=内容显示页对应的dp大小
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        // 设置滑动时的渐变程度
        menu.setFadeDegree(<span class="hljs-number">0.35</span>f);
        // 使SlidingMenu附加在Activity右边
        // SlidingMenu.SLIDING_CONTENT 将侧滑栏设置为在内容位置
        // SlidingMenu.SLIDING_WINDOW 将侧滑栏设置为在整个窗口呈现
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        // 设置SlidingMenu关联的布局
        menu.setMenu(R.layout.menu);
        // 在SlidingMenu关联布局中查询控件
        TextView tv_test = (TextView) menu.findViewById(R.id.tv_test);
        // 简单设置SlidingMenu界面显示内容
        tv_test.setText(<span class="hljs-string">"haha"</span>);
    }</code>
  • 相关联的dimen配置
<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">resources</span>></span>


    <span class="hljs-tag"><<span class="hljs-title">dimen</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"shadow_width"</span>></span>16dp<span class="hljs-tag"></<span class="hljs-title">dimen</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">dimen</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"slidingmenu_offset"</span>></span>160dp<span class="hljs-tag"></<span class="hljs-title">dimen</span>></span>

<span class="hljs-tag"></<span class="hljs-title">resources</span>></span></code>

这里写图片描述

  • 第二种写法—让类继承SlidingFragmentActivity或其他Sliding类型的Activity

    这种写法可以单独将SlidingMenu要展示的内容抽取出来,放到某一个Fragment中去处理

    • 代码演示
<code class="language-bash hljs  has-numbering">public class MainActivity extends SlidingFragmentActivity {

    private SlidingMenu slidingMenu;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 内容页布局
        <span class="hljs-keyword">set</span>ContentView(R.layout.activity_main);
        // 设置侧拉条目布局
        <span class="hljs-keyword">set</span>BehindContentView(R.layout.menu_frame);
        // 获取侧拉栏目对象
        slidingMenu = getSlidingMenu();

        /*
         * SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效 SlidingMenu.TOUCHMODE_MARGIN
         * 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE 不响应触摸事件
         */
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

        // 设置内容显示页对应的dp大小
        slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        // //设置左侧侧拉栏目宽度
        // slidingMenu.setBehindWidth(<span class="hljs-number">140</span>);
        // 设置侧拉栏目所在位置
        /*
         * SlidingMenu.LEFT SlidingMenu.LEFT_RIGHT SlidingMenu.RIGHT
         */
        slidingMenu.setMode(SlidingMenu.LEFT);
        // 给侧拉栏目和左侧内容页区分开(加线)
        slidingMenu.setShadowDrawable(R.drawable.shadow);
        // 设置线的宽度
        slidingMenu.setShadowWidthRes(R.dimen.shadow_width);

        // fragment去替换布局中节点
        MenuFragment menuFragment = new MenuFragment();
        // FragmentManager管理者
        getSupportFragmentManager()
        // 开启事物
        .beginTransaction()
        // 通过fragment去替换对应布局
        .replace(R.id.menu, menuFragment, <span class="hljs-string">"MENU"</span>)
        // 提交事物
        .commit();
    }</code>
  • MenuFragment代码
<code class="language-bash hljs  has-numbering">public class MenuFragment extends Fragment {
    private ListView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.menu_layout, container, <span class="hljs-literal">false</span>);
        listView = (ListView) view.findViewById(R.id.lv);
        <span class="hljs-keyword">return</span> view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayList<String> strList = new ArrayList<String>();
        <span class="hljs-keyword">for</span> (int i = <span class="hljs-number">0</span>; i < <span class="hljs-number">10</span>; i++) {
            strList.add(<span class="hljs-string">"第"</span> + i + <span class="hljs-string">"个条目"</span>);
        }
        // 设置数据适配器
        listView.setAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, strList));
    }

}
</code>
  • 布局配置
    • activity_main 的布局配置
<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">RelativeLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span>
    <span class="hljs-attribute">xmlns:tools</span>=<span class="hljs-value">"http://schemas.android.com/tools"</span>
    <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span> ></span>

<span class="hljs-tag"></<span class="hljs-title">RelativeLayout</span>></span></code>
  • menu_frame的配置
<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">LinearLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span>
    <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">"vertical"</span> ></span>

    <span class="hljs-tag"><<span class="hljs-title">FrameLayout
</span>        <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/menu"</span>
        <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"wrap_content"</span>
        <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span> ></span>
    <span class="hljs-tag"></<span class="hljs-title">FrameLayout</span>></span>

<span class="hljs-tag"></<span class="hljs-title">LinearLayout</span>></span></code>
  • memu_layout的布局配置
<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">LinearLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span>
    <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">"vertical"</span> ></span>

    <span class="hljs-tag"><<span class="hljs-title">ListView
</span>        <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/lv"</span>
        <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
        <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span> ></span>
    <span class="hljs-tag"></<span class="hljs-title">ListView</span>></span>

<span class="hljs-tag"></<span class="hljs-title">LinearLayout</span>></span></code>

这里写图片描述

SlidingMenu和ViewPager的冲突处理

  • 当界面使用viewPager来填充的时候,会出现一个问题,不管在什么位置,我们都能够将SlidingMenu拖拽出来,影响了ViewPager的正常滑动,我们可能会要求只有在第一页的时候,能够将SlidingMenu拖拽出来,其他时候,可以在最边缘位置,或者根本不拖拽出来。这里需要设置这样的代码

  • // 设置ViewPager的监听事件
    viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            // 当当天条目是0的时候,设置可以在任意位置拖拽出SlidingMenu
            if (arg0 == 0) {
                getSlidingMenu().setTouchModeAbove(
                        SlidingMenu.TOUCHMODE_FULLSCREEN);
            } else {
                // 当在其他位置的时候,设置不可以拖拽出来(SlidingMenu.TOUCHMODE_NONE),或只有在边缘位置才可以拖拽出来TOUCHMODE_MARGIN
                getSlidingMenu().setTouchModeAbove(
                        SlidingMenu.TOUCHMODE_NONE);
            }
        }
    
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onPageScrollStateChanged(int arg0) {
    
        }
    });
    

    `

demo详见
SlidingMenu+ViewPager冲突解决
http://download.csdn.net/detail/zhiyuan0932/9501092
SlidingMenu简单配置
http://download.csdn.net/detail/zhiyuan0932/9500675

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Eclipse 安卓开发导入SlidingMenu侧滑菜单这些坑!!

博主这几天的在开发一个安卓demo时候,想导入Slidingmenu实现侧滑菜单效果,SlidingMenu是GitHub上一个开源项目,它并不是一个完整的项目,而是你需要导入你的工程进行再次开发。今...

SlidingMenu侧滑框架,按返回键显示或关闭左侧菜单问题

在使用SlidingMenu侧滑框架,想要实现按返回键打开或关闭左侧菜单,我们通常是重写onKeyDown方法: @Override public boolean onKeyDown(int ke...

Slidingmenu与ViewPager广告栏滑动冲突解决分享

之前在公司开发的时候, 在主页部分fragment使用了ViewPager作为广告栏,但项目里又引用了SlidingMenu开源库用作侧滑菜单,于是这里产生了滑动冲突:广告栏不能滑动了,滑动却是侧滑了...

Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突

用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的...

Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39257409,本文出自【张鸿洋的博客】上一篇博客带大家实现了:Android 自...

Android ViewPager和Slidingmenu手势冲突问题

想必大家都遇到过手势和焦点的问题 Android ViewPager和Slidingmenu手势冲突问题,这些对于安卓初学者或者初次入职的是非常头疼的。

解决SlidingMenu与ViewPager的滑动冲突尝试

模仿唯品会侧边栏与viewpager场景,尝试解决SlidingMenu与ViewPager的滑动冲突。SlidingMenu使用张鸿洋大神的自定义控件。 参考:http://blog.csdn.n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)