当前位置:   article > 正文

DrawerLayout的使用_android drawerlayout设置宽度

android drawerlayout设置宽度

一、DrawerLayout简介

    是Google公司提供的侧滑栏,内置在SDK中

二、使用DrawerLayout

①、在layout布局中设置DrawerLayout

layout/activity_main(在layout中添加DrawerLayout)

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.newbiechen.reviewtechtrontierdemo.MainActivity">
  6. <!--侧滑栏控件-->
  7. <android.support.v4.widget.DrawerLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10. <!--主题内容,一般使用FrameLayout+Fragment实现内容页-->
  11. <FrameLayout
  12. android:id="@+id/main_frame_content"
  13. android:layout_width="match_parent"
  14. android:layout_height="match_parent">
  15. </FrameLayout>
  16. <!--侧滑栏的内容,这个View可以设置侧滑栏的宽度和高度-->
  17. <LinearLayout
  18. android:id="@+id/main_linear_left_drawer"
  19. android:layout_width="220dp"
  20. android:layout_height="match_parent"
  21. android:orientation="vertical">
  22. </LinearLayout>
  23. </android.support.v4.widget.DrawerLayout>
  24. </RelativeLayout>
解析:我们可以知道DrawerLayout标签内部接收两个View。

第一个为显示主页内容的视图。第二个为侧滑栏内容的视图。


②、设置DrawerLayout显示的内容

为侧滑栏和主视图添加View,构成完成的View。(为了方便起见,直接在layout中添加了)

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.newbiechen.reviewtechtrontierdemo.MainActivity">
  6. <!--侧滑栏控件-->
  7. <android.support.v4.widget.DrawerLayout
  8. <span style="white-space:pre"> </span>android:id="@+id/main_drawer"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent">
  11. <!--主题内容,一般使用FrameLayout+Fragment实现内容页-->
  12. <FrameLayout
  13. android:id="@+id/main_frame_content"
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent">
  16. <!--添加了一句话-->
  17. <TextView
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="it is main content"/>
  21. </FrameLayout>
  22. <!--侧滑栏的内容,这个View可以设置侧滑栏的宽度和高度-->
  23. <LinearLayout
  24. android:id="@+id/main_linear_left_drawer"
  25. android:layout_width="220dp"
  26. android:layout_height="match_parent"
  27. android:orientation="vertical">
  28. <!--添加了按钮-->
  29. <Button
  30. android:layout_width="match_parent"
  31. android:layout_height="100dp"
  32. android:text="Button1"/>
  33. <Button
  34. android:layout_width="match_parent"
  35. android:layout_height="100dp"
  36. android:text="Button2"/>
  37. <Button
  38. android:layout_width="match_parent"
  39. android:layout_height="100dp"
  40. android:text="Button3"/>
  41. </LinearLayout>
  42. </android.support.v4.widget.DrawerLayout>
  43. </RelativeLayout>

效果:



③、过程中的小问题

然后发现:额,怎么不能用啊。怎么刚开始显示的是侧滑栏的内容,而且不是给侧滑栏设置了width=220dp了怎么还会占满屏幕。

其实是FrameLayout(主题内容)与LinearLayout(侧滑栏)的View一起显示在了Activity上。

我们可以将FrameLayout中的<TextView>加上android:layout_gravity="center",然后就会发现文字出现在了中间。

说明:DrawerLayout其实本质上是FrameLayout。

那么如何解决这个问题呢:

在<LinearLayout>上加上 layout_gravity = "left"

效果:


这下终于可以用了,但是发现侧滑栏的背景是半透明的,一般的侧滑栏都有自己的背景颜色,好区分侧滑栏,只要在LinearLayout上加上background="#fff"就可以了。


④、设定Drawer的点击事件

  1. mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
  2. @Override
  3. public void onDrawerSlide(View drawerView, float slideOffset) {
  4. //移动Drawer的过程中回调
  5. }
  6. @Override
  7. public void onDrawerOpened(View drawerView) {
  8. //当打开时候回调
  9. }
  10. @Override
  11. public void onDrawerClosed(View drawerView) {
  12. //当关闭的时候回调
  13. }
  14. @Override
  15. public void onDrawerStateChanged(int newState) {
  16. }
  17. });

三、结合Toolbar使用DrawerLayout

效果图:


要求:Toolbar的使用

1、设置Toolbar与Activity相关联(参考:Toolbar的使用)

2、创建ActionBarDrawerToggle(其实是DrawerLayout.Listener的实现,连接Toolbar与DrawerLayout)

构造方法:

  1. mDrawerToggle = new ActionBarDrawerToggle(activity,
  2. mDrawerLayout,
  3. mToolbar
  4. R.string.drawer_open, /* "对打开侧滑栏的描述 */
  5. R.string.drawer_close /* "对关闭侧滑栏的描述 */
  6. )
创建:

  1. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,mDrawerLayout,
  2. mToolbar,R.string.drawer_open,R.string.drawer_close);
  3. //设置Toolbar显示左上角的图标,默认为返回箭头
  4. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  5. //将toggle设置为mDrawerLayout的监听。
  6. mDrawerLayout.addDrawerListener(toggle);

怎么将Toolbar左上角的指示器弄成(效果图上像三一样的图标)

添加:

mDrawerToggle.syncState();

这样就跟效果图一样了。

3、设置按钮的监听

我们知道ActionBarDrawerToggle是DrawerLayout.Listener的实现,所以也就表示能够重写Listener方法。

  1. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,mDrawerLayout,
  2. mToolbar,R.string.drawer_open,R.string.drawer_close){
  3. @Override
  4. public void onDrawerOpened(View drawerView) {
  5. super.onDrawerOpened(drawerView);
  6. }
  7. @Override
  8. public void onDrawerClosed(View drawerView) {
  9. super.onDrawerClosed(drawerView);
  10. }
  11. };

4、特殊配置,保证Activity重启时候恢复原状。

  1. @Override
  2. protected void onPostCreate(Bundle savedInstanceState)
  3. {
  4. super.onPostCreate(savedInstanceState);
  5. // Sync the toggle state after onRestoreInstanceState has occurred.
  6. mDrawerToggle.syncState();
  7. }
  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig)
  3. {
  4. super.onConfigurationChanged(newConfig);
  5. // Pass any configuration change to the drawer toggls
  6. mDrawerToggle.onConfigurationChanged(newConfig);
  7. }

5、完整代码

  1. public class MainActivity extends AppCompatActivity {
  2.     private DrawerLayout mDrawerLayout;
  3.     private Toolbar mToolbar;
  4.     private ActionBarDrawerToggle mDrawerToggle;
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.activity_main);
  9.         mDrawerLayout = (DrawerLayout) findViewById(R.id.main_drawer);
  10.         mToolbar = (Toolbar) findViewById(R.id.main_toolbar);
  11.         //将Toolbar关联到Activity上
  12.         setSupportActionBar(mToolbar);
  13.         mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,
  14.                 mToolbar,R.string.drawer_open,R.string.drawer_close){
  15.             @Override
  16.             public void onDrawerOpened(View drawerView) {
  17.                 super.onDrawerOpened(drawerView);
  18.             }
  19.             @Override
  20.             public void onDrawerClosed(View drawerView) {
  21.                 super.onDrawerClosed(drawerView);
  22.             }
  23.         };
  24.         //设置Toolbar显示左上角的图标
  25.         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  26.         //将toggle设置为mDrawerLayout的监听。
  27.         mDrawerLayout.addDrawerListener(mDrawerToggle);
  28.         mDrawerToggle.syncState();
  29.     }
  30.     @Override
  31.     protected void onPostCreate(@Nullable Bundle savedInstanceState) {
  32.         super.onPostCreate(savedInstanceState);
  33.         mDrawerToggle.syncState();
  34.     }
  35.     @Override
  36.     public void onConfigurationChanged(Configuration newConfig) {
  37.         super.onConfigurationChanged(newConfig);
  38.         mDrawerToggle.onConfigurationChanged(newConfig);
  39.     }
  40. }

四、使用Navigation Drawer来制作DrawerLayout 的侧滑栏

http://www.jianshu.com/p/76e30f87a4ed

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/279550
推荐阅读
相关标签
  

闽ICP备14008679号