Android原生侧滑 控件_只爱你,小笨的博客-程序员宅基地

在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的“抽屉”功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一个简单效果的部分截图:
左拉:
这里写图片描述
右拉:
这里写图片描述
怎么样?是不是在平时开发的应用中很常见?OK,那么接下来我直接上代码:
activity_sliding.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">

    <!-- 下面显示的主要是主界面内容 -->
    <RelativeLayout
        android:id="@+id/main_content_frame_parent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:gravity="center">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="openLeftLayout"
            android:text="左边" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="100dp"
            android:onClick="openRightLayout"
            android:text="右边" />

    </RelativeLayout>

    <!-- 左侧滑动栏 -->
    <RelativeLayout
        android:id="@+id/main_left_drawer_layout"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/colorPrimary"
        android:paddingTop="50dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="左边菜单测试" />

    </RelativeLayout>

    <!-- 右侧滑动栏 -->
    <RelativeLayout
        android:id="@+id/main_right_drawer_layout"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:background="@color/colorPrimary"
        android:paddingTop="50dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="右边菜单测试" />
    </RelativeLayout>


</android.support.v4.widget.DrawerLayout>

通过上面的布局文件我们发现 drawerlayout中的子布局分为content、left、right三部分,其中left和rig
ht的布局需要在layout中声明android:layout_gravity属性,值分别是start和end。很显然,drawerlayout布局类似一个大容器,超屏布局,将left的布局放在了控件的开始地方,right的布局放在了控件结尾的地方。

DrawerSlidingActivity.java:
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.RelativeLayout;

public class DrawwerSlidingActivity extends AppCompatActivity {
    

    // 抽屉菜单对象
    private ActionBarDrawerToggle drawerbar;
    public DrawerLayout drawerLayout;
    private RelativeLayout main_left_drawer_layout, main_right_drawer_layout;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_slidingmenu);

        initLayout();
        initEvent();
    }

    public void initLayout() {
        drawerLayout = (DrawerLayout) findViewById(R.id.main_drawer_layout);

        //设置菜单内容之外其他区域的背景色
        drawerLayout.setScrimColor(Color.TRANSPARENT);

        //左边菜单
        main_left_drawer_layout = (RelativeLayout) findViewById(R.id.main_left_drawer_layout);
        //右边菜单
        main_right_drawer_layout = (RelativeLayout) findViewById(R.id.main_right_drawer_layout);

    }

    //设置开关监听
    private void initEvent() {
        drawerbar = new ActionBarDrawerToggle(this, drawerLayout, R.mipmap.ic_launcher, R.string.open, R.string.close) {
            //菜单打开
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }

            // 菜单关闭
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }
        };

        drawerLayout.setDrawerListener(drawerbar);
    }

    //左边菜单开关事件
    public void openLeftLayout(View view) {
        if (drawerLayout.isDrawerOpen(main_left_drawer_layout)) {
            drawerLayout.closeDrawer(main_left_drawer_layout);
        } else {
            drawerLayout.openDrawer(main_left_drawer_layout);
        }
    }

    // 右边菜单开关事件
    public void openRightLayout(View view) {
        if (drawerLayout.isDrawerOpen(main_right_drawer_layout)) {
            drawerLayout.closeDrawer(main_right_drawer_layout);
        } else {
            drawerLayout.openDrawer(main_right_drawer_layout);
        }
    }
}

其中要注意的地方一是:drawerLayout.setScrimColor(Color.TRANSPARENT),此属性设置的
是侧滑布局显示时内容之外区域的背景颜色,默认是灰色,这里我为了大家看着清晰就设置成透明的了;二是drawerLayout的监听器ActionBarDrawerToggle,而ActionBarDrawerToggle对象我们通过查阅ActionBarDrawerToggle的源码发现它是DrawerListener的实现类,也就是说ActionBarDrawerToggle通过实现DrawerListener监听,在此基础上封装了onDrawerOpened、onDrawerClosed、onDrawerStateChanged和onDrawerSlide的事件处理,以便于开发者在滑动过程中自定义要处理的一些操作。
最后检查一下你的AS是不是最新版,如果不是的话,则需要在build.gradle中增加以下配置:

compile ‘com.android.support:appcompat-v7:24.2.1’

<linkrel="stylesheet"href="https://csdnimg.cn/release/phoenix/production/markdown_views-68a8aad09e.css">
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43042476/article/details/82117948

智能推荐

gradle安装以及本地仓库配置_lazy_cat_go的博客-程序员宅基地

1.根据需要选择版本下载,我选的是5.2.1https://gradle.org/releases/2.注意检查jdk8或者更高版本是否安装好3.配置系统环境变量新建系统环境变量 ,GRADLE_HOME修改path系统环境变量4.检查是否配置正确gradle -version5.修改本地仓库位置新建系统环境变量,GRADLE_USER_HOME配置完成!!!!!!!!!!重新启动idea,自动下载jar包,且已经下载到D:\gradleRepository.gradle

cocos2dlua-导演_素缘辞的博客-程序员宅基地_cocoslua 调用导演

导演运行场景或者替换场景。 场景部分的创建使用请参阅场景部分。if cc.Director:getInstance():getRunningScene() then cc.Director:getInstance():replaceScene(scene)else cc.Director:getInstance():runWithScene(scene)end

【miniui】mini-autocomplete使用onbeforeload事件修改请求方式_chenchao2016的博客-程序员宅基地_mini-autocomplete

例子都是官网demo 拿过来的,省略的地方请看官网demo给 自动查询加了一个 : onbeforeload=&quot;beforeAutoCompleteSend&quot;属性。&amp;lt;input id=&quot;tbl1&quot; name=&quot;tb&quot; class=&quot;mini-autocomplete&quot; required=&quot;true&quot; onbeforeload=&quot;beforeAutoCompleteSend&quot;

荣耀笔记本可以JAVA_荣耀笔记本装Win10系统攻略,一文教你快速入门_weixin_39902184的博客-程序员宅基地

荣耀MagicBook科技尝鲜版发布已经有一段时间了,这个预装了Linux版本的笔记本在原来已经极具性价比的基础上又便宜了300元,而荣耀笔记本如何安装Win10系统俨然成为了热门话题。对于极客爱好者和装机大神来说,荣耀笔记本Linux系统有着一些天然的优势。但是对于电脑小白来说,Linux系统的操作可能会较繁琐一些,还是会觉得Windows系统更加符合使用习惯。没有关系,今天笔者就教大家如何花3...

C++中int、double类型转换为string类型_flowerCoder的博客-程序员宅基地

#include #include #include template string GetString(const T parameter){  std::stringstream newStr;  newStr parameter;  return newStr.str();}

做好JavaScript学习二三招,想不会都难_dq_cl666的博客-程序员宅基地

最近看过很多关于学习方法以及提高自己学习能力的文章,尤其是对于学习javascript的学习,自己一直也在摸索,也进过坑,看到一些大神的分享也有不少收获,今天的话就把自己的、他人的或者看到文章的你的我还不知道的想法,整理如下,希望对我们都有所帮助(PS:更多的是收集的大牛的见解)。正题开始,“前端怎么学”应该因人而异,别人的方法未必适合自己。接下来要说的方法大家还是根据个人

随便推点

ListView.getChildAt(i) java.lang.NullPointerException_doomvsjing的博客-程序员宅基地

ListView在数据多时是局部显示;getChildAt(index)取值是当前可见区域的子项; 取值范围在ListView.getFirstVisiblePosition() ListView.getLastVisiblePosition()之间; 所以会出现ListView.getChildAt(i) java.lang.NullPointerException; 正确的获取方法:ge

【PTA题目解答】7-1 近似求PI_doreaming的博客-程序员宅基地

7-1 近似求PI (15分)本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。​2​​π​​=1+​3​​1!​​+​3×5​​2!​​+​3×5×7​​3!​​+⋯+​3×5×⋯×(2×i+1)​​i!​​+⋯输入格式:输入在一行中给出精度eps,可以使用以下语句来读输入:scanf("%le", &amp;eps);输出格式:在一行内,按照以下格式输出π的近似值(保留小数点后5位):PI = 近似值输入样例:1E-5输出样例:

java面试题 :买可乐问题,5个空瓶可换一瓶可乐,问n个人买几瓶?_菜鸟腾飞的博客-程序员宅基地

` public class Test { public static void main(String[] args) { // TODO Auto-generated method stub firstMethod(); //一个一个喝水 公式法 最为简单 Scanner scanner=new Scanner(System.in); System.out.println(

VC++检测VM、VPC虚拟机代码 ._SauceJ的博客-程序员宅基地

C++检测VM、VPC虚拟机代码,添加后只需要调用IsVirtualMachine即可判断是否在虚拟机运行!AntiVM.h

Bnuntu140.4搭建Android5.1开发环境和编译_被追杀的晨曦的博客-程序员宅基地

From: http://www.linuxidc.com/Linux/2015-07/119759.htm1、安装Ubuntu14.04先下载Ubuntu系统,官网地址,从ubuntu10.04-ubuntu15.04都有下载,具体根据需求可以下载desktop和server版本一般虚拟机建议安装desktop版本,方便管理,本人电脑是64位的,所以下载的ubuntu-14.04.2-se...

学习使用口令破解工具:hashcat、LC、SamInside_慎言静思笃行之的博客-程序员宅基地_saminside

在学习使用口令破解工具之前,我们要先创建一个用户账号,原理是利用其哈希值进行破解。很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!重要的事情一定要说三遍。在宿主机(我是win10系统)创建用户获取的hash值是假的,根本无法用于破解。我个人猜测,是由于宿主机存在某种保护机制,使得不让获取到真正的hash。因...