View 体系
View 体系 · androidx.core
DrawerLayout:侧滑抽屉Core 1.20.0-alpha01
打开/关闭、锁定模式、监听器,以及边缘滑动抽屉的配置。
最后更新 2026-08-01
复制即用
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 主内容:必须是第一个子 View -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 抽屉:layout_gravity 决定方向 -->
<FrameLayout
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#fff" />
</androidx.drawerlayout.widget.DrawerLayout>代码控制:
import androidx.drawerlayout.widget.DrawerLayout;
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.openDrawer(GravityCompat.START);
drawer.closeDrawer(GravityCompat.START);
// 锁定:阻止用户手势打开
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
// 监听状态
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {}
@Override
public void onDrawerOpened(View drawerView) {}
@Override
public void onDrawerClosed(View drawerView) {}
@Override
public void onDrawerStateChanged(int newState) {}
});常见陷阱
- 主内容不是第一个子 View:第一个子 View 必须是主内容,否则抽屉行为异常。
- 忘加
layout_gravity:抽屉没有 gravity 不会被识别。 - 锁定模式忘恢复:
LOCK_MODE_LOCKED_CLOSED后记得在合适时机恢复LOCK_MODE_UNLOCKED。 - 边缘滑动冲突:
setDrawerEdgeLockEnabled(API 27+)控制边缘手势,与列表侧滑冲突时注意。
要点
- 主内容必须是第一个子 View;抽屉用
layout_gravity声明方向(start/end/left/right)。 - 状态常量:
STATE_IDLE/STATE_DRAGGING/STATE_SETTLING。 - 锁定模式:
LOCK_MODE_UNLOCKED、LOCK_MODE_LOCKED_CLOSED、LOCK_MODE_LOCKED_OPEN。 - 与
Toolbar的setSupportActionBar+ActionBarDrawerToggle搭配可实现汉堡按钮联动。 - Compose 中优先使用
ModalNavigationDrawer,不需要此库。