HarmonyOS 鸿蒙Next中滑动菜单drawerLayout
HarmonyOS 鸿蒙Next中滑动菜单drawerLayout
滑动菜单drawerLayout
1.修改布局文件,把最外层换成drawerLayout,其中可以包含两个子控件
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_marginTop=“20dp”
>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width=“match_parent”
android:layout_height="?attr/actionBarSize"
android:background="@color/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:text=“This is menu”
android:textSize=“30sp”
android:background="#FFF"
android:layout_marginTop=“20dp”
/>
</androidx.drawerlayout.widget.DrawerLayout>
第二个控件的layout_gravity必须指定,决定了滑动菜单从哪边滑出,left或right,start是由系统语言决定,如果系统语言是汉语或者英语,就是从左往右,如果是阿拉伯语,就是从右往左
还要注意drawerLayout的高度如果是match_parent,那么会被状态栏挡住一部分内容,可以margin把两个子控件下移
2.显示滑动菜单的导航按钮,提醒用户可左滑,并且修改导航按钮的图标和点击事件(本来是一个home键,默认图标是一个箭头)
//getSupportActonBar获取ActionBar的实例
supportActionBar?.let{
it.setDisplayHomeAsUpEnabled(true)
it.setHomeAsUpIndicator(android.R.drawable.ic_menu_sort_by_size)//修改图标,这个是系统的图标
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
…
//home键的id永远是 android.R.id.home
android.R.id.home->binding.drawerLayout.openDrawer(GravityCompat.START)//要和xml保持一致
}
return true
}
更多关于HarmonyOS 鸿蒙Next中滑动菜单drawerLayout的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,drawerLayout是用于实现侧滑菜单的容器组件。它包含主内容区和抽屉区,通过手势滑动或编程方式控制抽屉的展开/收起。主要特性包括:
- 支持左右双抽屉;
- 提供openDrawer()/closeDrawer()方法控制状态;
- 可通过edgeWidth设置触发区域宽度;
- 支持抽屉锁定模式。
使用时需在<drawerLayout>
内定义<Stack>
作为主界面和<Column>
作为抽屉内容。手势滑动灵敏度可通过dragResponseRegion调整。
更多关于HarmonyOS 鸿蒙Next中滑动菜单drawerLayout的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中实现滑动菜单(DrawerLayout)需要注意以下几点:
- 布局方面:
- 使用
<DrawerLayout>
作为根布局,包含两个子视图 - 第一个子视图是主内容区(如示例中的FrameLayout)
- 第二个子视图是侧滑菜单,必须设置
layout_gravity
属性(start/left/right)
- 适配状态栏:
- 建议使用
ohos:fitWindow="true"
属性自动适配状态栏 - 或者通过
marginTop
预留状态栏空间
- 导航按钮控制:
- 通过
setNavigationIcon()
设置菜单图标 - 使用
openDrawer()
/closeDrawer()
控制菜单开关 - 监听
onDrawerStateChanged
处理状态变化
- 手势控制:
- 默认支持边缘滑动手势
- 可通过
setDrawerLockMode()
锁定/解锁手势
注意在HarmonyOS中相关API命名可能与Android有所不同,但核心功能实现思路是一致的。建议参考官方文档获取准确的API名称和使用方法。