DrawerLayout是一个布局,在布局中允许放入2个子控件,第一个控件是主屏幕中显示的内容,第二个控件是滑动菜单中显示的内容。
首先来看一看activity_main.xml中的代码:
<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">
<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"
/>
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity = "start"
android:textSize="20dp"
android:background="#fff"/>
</android.support.v4.widget.DrawerLayout>
DrarweLayout这个控件是由support-v4库提供的。
第一个控件FrameLayout用来显示主屏幕中的内容,里面放入了上一节定义的ToolBar
第二个子控件使用了一个TextView用来显示内容(其实放啥都可以)
有一点值得注意的是:在第二个控件中有一个属性是必须指定的:layout_gravity
指定left表示滑动菜单在左边,right表示在右边,start表示根据系统语言来进行判断。
public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
//获取ActionBar实例
ActionBar actionBar = getSupportActionBar();
if (actionBar != null){
//显示导航按钮 导航按钮(HomeAsUp)的id永远是android.R.id.home。
actionBar.setDisplayHomeAsUpEnabled(true);
//设置导航按钮图标,默认为返回箭头(返回上一个活动)
actionBar.setHomeAsUpIndicator(R.drawable.menu);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
//加载toolbar这个菜单文件
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
//展示滑动菜单 后面的参数与XML中定义的一样
drawerLayout.openDrawer(GravityCompat.START);
break;
}
return true;
}
}
下面附上运行图: