DrawerLayout是一个拥有两个子控件的布局,第一个子控件是主屏幕中显示的内容,第二个子控件是滑动菜单中显示的内容:
1 <android.support.v4.widget.DrawerLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:id="@+id/drawer_layout" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 > 8 9 <FrameLayout 10 android:layout_width="match_parent" 11 android:layout_height="match_parent"> 12 13 <android.support.v7.widget.Toolbar 14 android:id="@+id/toolbar" 15 android:layout_width="match_parent" 16 android:layout_height="?attr/actionBarSize" 17 android:background="?attr/colorPrimary" 18 android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 19 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 20 21 </FrameLayout> 22 <TextView 23 android:layout_width="match_parent" 24 android:layout_height="match_parent" 25 android:layout_gravity="start" 26 android:text="这是一个菜单" 27 android:textSize="30sp" 28 android:background="#FFF"/> 29 </android.support.v4.widget.DrawerLayout>
要注意的地方是第二个子控件TextView的layout_gravity属性指定的是滑动菜单是在屏幕的左边还是右边,属性值使用right或者left,这里使用start表示根据系统语言进行判断。
这里的效果是这样:
然后在标题栏上加入一个导航按钮,点击导航按钮也能打开滑动菜单,具体实现原理是,标题栏左方本来就有一个叫作HomeAsup的按钮,它默认的图标是一个返回的箭头,含义是返回上一个活动,所以只需要将它显示出来,修改它的图标和点击事件即可。
具体java代码:
1 public class MainActivity extends AppCompatActivity { 2 3 private DrawerLayout mDrawerLayout; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 9 setSupportActionBar(toolbar); 10 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 11 ActionBar actionBar = getSupportActionBar(); 12 if(actionBar != null){ 13 //让ActionBar的HomeAsUp按钮显示出来 14 actionBar.setDisplayHomeAsUpEnabled(true); 15 //改变HomeAsUp按钮的图标 16 actionBar.setHomeAsUpIndicator(R.drawable.ic_action_name); 17 } 18 19 } 20 ... 21 public boolean onOptionsItemSelected(MenuItem item){ 22 switch (item.getItemId()){ 23 case android.R.id.home: 24 mDrawerLayout.openDrawer(GravityCompat.START); 25 break; 26 ... 27 default: 28 break; 29 } 30 return true; 31 } 32 }
时间: 2024-10-06 16:57:19