1.概述
DrawerLayout是一个布局,在其布局中只允许方两个直接子控件。第一个子控件是主屏幕中显示的内容;第二个子控件是滑动菜单中要显示的内容。
2.实例
2.1 实现效果
实现效果如下所示:点击或向屏幕右侧滑动,出现侧滑菜单:
2.2 添加菜单目录图标按钮
右击res目录->new->Directory,创建一个menu文件夹,然后右击menu文件夹->new->Menu resource file,创建一个toobar.xml文件如下所示:每一个item就是一个action按钮
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu" android:icon="@drawable/ic_menu" android:title="目录" app:showAsAction="always"/> </menu>
2.3 设置布局样式
在activity_mian.xml中:
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 屏幕主界面展示的内容 --> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- ToolBar标题栏 --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> <!-- 悬浮按钮 --> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="35dp" /> </FrameLayout> <!-- 展示滑动菜单内的内容 --> <LinearLayout android:id="@+id/left_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="#FFFFFF"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="This is menu" android:textSize="25sp" android:textColor="#dd033d"/> </LinearLayout> </android.support.v4.widget.DrawerLayout>
2.4 在Activity中处理业务
在MainActivity.java中:
public class MainActivity extends AppCompatActivity { private DrawerLayout drawerLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = findViewById(R.id.drawer_layout); Toolbar toolbar = findViewById(R.id.toolbar); //设置支持的ActionBar setSupportActionBar(toolbar); } public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.toolbar,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu: //打开侧滑菜单 drawerLayout.openDrawer(Gravity.START); break; } return true; } }
注意:在openDrawer()中传入了Gravity.start