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"&gt;

<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

2 回复

在HarmonyOS Next中,drawerLayout是用于实现侧滑菜单的容器组件。它包含主内容区和抽屉区,通过手势滑动或编程方式控制抽屉的展开/收起。主要特性包括:

  1. 支持左右双抽屉;
  2. 提供openDrawer()/closeDrawer()方法控制状态;
  3. 可通过edgeWidth设置触发区域宽度;
  4. 支持抽屉锁定模式。

使用时需在<drawerLayout>内定义<Stack>作为主界面和<Column>作为抽屉内容。手势滑动灵敏度可通过dragResponseRegion调整。

更多关于HarmonyOS 鸿蒙Next中滑动菜单drawerLayout的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中实现滑动菜单(DrawerLayout)需要注意以下几点:

  1. 布局方面:
  • 使用<DrawerLayout>作为根布局,包含两个子视图
  • 第一个子视图是主内容区(如示例中的FrameLayout)
  • 第二个子视图是侧滑菜单,必须设置layout_gravity属性(start/left/right)
  1. 适配状态栏:
  • 建议使用ohos:fitWindow="true"属性自动适配状态栏
  • 或者通过marginTop预留状态栏空间
  1. 导航按钮控制:
  • 通过setNavigationIcon()设置菜单图标
  • 使用openDrawer()/closeDrawer()控制菜单开关
  • 监听onDrawerStateChanged处理状态变化
  1. 手势控制:
  • 默认支持边缘滑动手势
  • 可通过setDrawerLockMode()锁定/解锁手势

注意在HarmonyOS中相关API命名可能与Android有所不同,但核心功能实现思路是一致的。建议参考官方文档获取准确的API名称和使用方法。

回到顶部