Android Studio中如何将DrawerLayout从activity_main.xml分离为独立布局?
纯XML拆分DrawerLayout与主页面方案
直接利用Android的<include>标签就能完成布局拆分,具体操作分两步:
1. 整理主页面布局(activity_main.xml)
把原布局中DrawerLayout内部的主内容区域单独保留在activity_main.xml,移除外层的DrawerLayout和NavigationView:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:elevation="4dp" android:background="#6666ff" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"> </androidx.appcompat.widget.Toolbar> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ImageButton android:id="@+id/img" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" android:scaleType="fitXY" android:scaleX="1.1" android:scaleY="1.0" android:src="@drawable/img1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0"> </ImageButton> <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="BANNER" ads:adUnitId="ca-app-pub-3940256099942544/6300978111" android:layout_centerHorizontal="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> </com.google.android.gms.ads.AdView> </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout>
2. 创建独立的DrawerLayout布局文件
新建layout_drawer.xml,以DrawerLayout为根节点,通过<include>引入主页面,同时保留侧边NavigationView:
<?xml version="1.0" encoding="utf-8"?> <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/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start" tools:context=".MainActivity"> <!-- 引入主页面内容 --> <include layout="@layout/activity_main"/> <!-- 侧边抽屉菜单 --> <com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/nav_header" app:menu="@menu/navigation_menu"/> </androidx.drawerlayout.widget.DrawerLayout>
最后说明
完成XML拆分后,需要在MainActivity中设置布局为新建的layout_drawer.xml:
setContentView(R.layout.layout_drawer);
内容的提问来源于stack exchange,提问作者Marfog509
相关产品推荐
相关产品推荐

