Android官方的侧滑控件DrawerLayout的示例代码

Android官方的侧滑控件DrawerLayout的示例代码,第1张

概述导语侧滑控件,以前大家用的可能是三方的SlidingMenu控件,最近在看谷歌源码项目,意外的看到一个DrawerLayout控件。上网一查,原来这个控件是官方给我们提供的一个侧滑菜单控件。既然谷歌已经提供了一个侧滑控件,

导语

侧滑控件,以前大家用的可能是三方的SlIDingMenu控件,最近在看谷歌源码项目,意外的看到一个 DrawerLayout 控件。上网一查,原来这个控件是官方给我们提供的一个侧滑菜单控件。既然谷歌已经提供了一个侧滑控件,我们又何必去用一个三方的SlIDingMenu控件来实现相同的效果。于是,我决定自己手敲一个Demo来实现看看。

1、DrawerLayout效果图

2、DrawerLayout 的介绍

DrawerLayout的官方文档介绍链接:http://androiddoc.qiniudn.com/reference/android/support/v4/widget/DrawerLayout.html

DrawerLayout 类的结构图如下:

官方中文简介大概如下:

DrawerLayout作为窗口内容的顶层容器,允许从窗口的一个或两个垂直边缘拉出交互式“抽屉”视图。

抽屉定位和布局使用androID:layout_gravity 子视图对应的属性进行控制,对应于您希望抽屉从哪个侧面出现:左侧或右侧(或支持布局方向的平台版本上的开始/结束)。请注意,您只能窗口的每个垂直边缘的一个抽屉视图。如果您的布局在窗口的每个垂直边缘配置多个抽屉视图,则会在运行时抛出异常。

3、DrawerLayout 的使用

一般使用 DrawerLayout 侧滑菜单,可以通过 Toolbar + DrawerLayout来实现。

在res/layout 中,新建一个toolbar.xml文件

<?xml version="1.0" enCoding="utf-8"?><androID.support.v7.Widget.Toolbar  xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:app="http://schemas.androID.com/apk/res-auto"  androID:ID="@+ID/tl_custom"  androID:layout_wIDth="match_parent"  androID:layout_height="wrap_content"  androID:background="?attr/colorPrimary"  androID:minHeight="?attr/actionbarSize"  androID:popuptheme="@style/themeOverlay.AppCompat.Dark"  app:theme="@style/themeOverlay.AppCompat.Dark.Actionbar"></androID.support.v7.Widget.Toolbar>

在新建一个drawerlayout.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/dl_left"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">  <!--主布局-->  <linearLayout    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent">  </linearLayout>  <!--侧滑菜单-->  <relativeLayout    androID:layout_wIDth="180dp"    androID:clickable="true"    androID:layout_height="match_parent"    androID:layout_gravity="left"    androID:background="#fff"    >    <linearLayout      androID:ID="@+ID/ll_home_navigation_top"      androID:layout_wIDth="match_parent"      androID:layout_height="120dp"      androID:layout_alignParenttop="true"      androID:background="@color/colorPrimary"      androID:gravity="center"      androID:orIEntation="vertical">      <ImageVIEw        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:layout_gravity="center"        androID:src="@mipmap/ic_launcher" />    </linearLayout>    <ListVIEw      androID:ID="@+ID/lv_left_menu"      androID:layout_below="@ID/ll_home_navigation_top"      androID:layout_wIDth="match_parent"      androID:layout_height="match_parent"      androID:divIDer="@null"      androID:text="DrawerLayout" />  </relativeLayout></androID.support.v4.Widget.DrawerLayout>

主布局activity_main.xml:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:tools="http://schemas.androID.com/tools"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:orIEntation="vertical"  tools:context=".MainActivity">  <!--Toolbar-->  <include layout="@layout/custom_toolbar" />  <!--DrawerLayout-->  <include layout="@layout/custom_drawerlayout" /></linearLayout>

MainActivity.java:

public class MainActivity extends AppCompatActivity {  protected boolean statusbarCompat = true;  private static long DOUBLE_CliCK_TIME = 0L;  //声明相关变量  private Toolbar toolbar;  private DrawerLayout mDrawerLayout;  private ActionbarDrawerToggle mDrawerToggle;  private ListVIEw lvleftMenu;  private String[] lvs = {"AndroID","iOS","Python","HTML5","Java"};  private ArrayAdapter arrayAdapter;  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    if (statusbarCompat) {      StatusbarCompat.compat(this,ContextCompat.getcolor(this,R.color.colorPrimary));      transparent19and20();    }    findVIEws(); //获取控件    toolbar.setTitle("Drawerlayout");//设置Toolbar标题    toolbar.setTitleTextcolor(color.parsecolor("#ffffff")); //设置标题颜色    setSupportActionbar(toolbar);    getSupportActionbar().setHomebuttonEnabled(true); //设置返回键可用    getSupportActionbar().setdisplayHomeAsUpEnabled(true);    //创建返回键,并实现打开关/闭监听    mDrawerToggle = new ActionbarDrawerToggle(this,mDrawerLayout,toolbar,R.string.open,R.string.close) {      @OverrIDe      public voID onDrawerOpened(VIEw drawerVIEw) {        super.onDrawerOpened(drawerVIEw);      }      @OverrIDe      public voID onDrawerClosed(VIEw drawerVIEw) {        super.onDrawerClosed(drawerVIEw);      }    };    mDrawerToggle.syncState();    mDrawerLayout.addDrawerListener(mDrawerToggle);    //设置菜单列表    arrayAdapter = new ArrayAdapter(this,androID.R.layout.simple_List_item_1,lvs);    lvleftMenu.setAdapter(arrayAdapter);    lvleftMenu.setonItemClickListener(new AdapterVIEw.OnItemClickListener() {      @OverrIDe      public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) {        Toast.makeText(MainActivity.this,"点击"+position,Toast.LENGTH_SHORT).show();      }    });  }  //返回键监听  @OverrIDe  public boolean onKeyDown(int keyCode,KeyEvent event) {    if (event.getKeyCode() == KeyEvent.KEYCODE_MENU && mDrawerLayout != null) {      if (mDrawerLayout.isDrawerOpen(Gravity.left)) {        mDrawerLayout.closeDrawer(Gravity.left);      } else {        mDrawerLayout.openDrawer(Gravity.left);      }      return true;    } else if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {      if (mDrawerLayout.isDrawerOpen(Gravity.left)) {        mDrawerLayout.closeDrawer(Gravity.left);      } else {        if ((System.currentTimeMillis() - DOUBLE_CliCK_TIME) > 2000) {          Toast.makeText(MainActivity.this,"再按一次退出",Toast.LENGTH_SHORT).show();          DOUBLE_CliCK_TIME = System.currentTimeMillis();        } else {          finish();        }      }      return true;    }    return super.onKeyDown(keyCode,event);  }  protected voID transparent19and20() {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT        && Build.VERSION.SDK_INT < Build.VERSION_CODES.LolliPOP) {      getwindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);    }  }  private voID findVIEws() {    toolbar = (Toolbar) findVIEwByID(R.ID.tl_custom);    mDrawerLayout = (DrawerLayout) findVIEwByID(R.ID.dl_left);    lvleftMenu = (ListVIEw) findVIEwByID(R.ID.lv_left_menu);  }}

本文的源码,如果谁有兴趣要的,直接关注微信公众号后台回复:侧滑 或者DrawerLayout 。

4、总结

本文创作时间为4个小时,原创不易,如果哪里有错误或者写作意见,请帮忙指正和提醒,谢谢,大家共同进步!

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

总结

以上是内存溢出为你收集整理的Android官方的侧滑控件DrawerLayout的示例代码全部内容,希望文章能够帮你解决Android官方的侧滑控件DrawerLayout的示例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存