用fragment制作导航栏
时间: 2024-05-24 12:13:17 浏览: 98
1.创建一个NavigationDrawer Fragment
NavigationDrawer Fragment即为侧滑菜单的实现,可以通过以下步骤创建:
1.1 新建一个Blank Fragment
在Android Studio中,右键点击app文件夹,选择New -> Fragment -> Fragment(Blank),并命名为NavigationDrawerFragment。
1.2 修改布局文件
在NavigationDrawerFragment的布局文件中,添加一个DrawerLayout作为根布局,然后在DrawerLayout中添加一个NavigationView,如下所示:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/navigation_menu"/>
</android.support.v4.widget.DrawerLayout>
其中,NavigationView中的headerLayout属性可以指定一个布局文件作为NavigationView的头部,例如:
<android.support.design.widget.NavigationView
...
app:headerLayout="@layout/navigation_header"
...
/>
1.3 创建菜单文件
在res文件夹中创建一个menu文件夹,并在其中创建一个navigation_menu.xml文件,用于定义菜单项。例如:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_item_1"
android:checked="true"
android:icon="@drawable/ic_menu_item_1"
android:title="@string/menu_item_1"/>
<item
android:id="@+id/nav_item_2"
android:icon="@drawable/ic_menu_item_2"
android:title="@string/menu_item_2"/>
<item
android:id="@+id/nav_item_3"
android:icon="@drawable/ic_menu_item_3"
android:title="@string/menu_item_3"/>
</group>
</menu>
1.4 实现DrawerLayout的开关
在NavigationDrawerFragment的onCreateView方法中,可以通过以下代码实现DrawerLayout的开关:
DrawerLayout drawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
getActivity(), drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
其中,ActionBarDrawerToggle是一个内置的开关控件,可以在DrawerLayout的开关状态下自动切换ActionBar的图标和标题,同时也支持手势滑动开关。
2.创建一个Content Fragment
Content Fragment即为导航栏的内容部分,可以通过以下步骤创建:
2.1 新建一个Blank Fragment
在Android Studio中,右键点击app文件夹,选择New -> Fragment -> Fragment(Blank),并命名为ContentFragment。
2.2 修改布局文件
在ContentFragment的布局文件中,添加一个LinearLayout作为根布局,然后在LinearLayout中添加需要显示的内容,例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/content"/>
</LinearLayout>
其中,TextView可以替换为其他需要显示的控件,例如ListView、RecyclerView等。
3.实现导航栏的切换
通过以上步骤,已经创建了一个带有侧滑菜单和内容部分的Activity,下面可以通过NavigationView的点击事件实现导航栏的切换。
在NavigationDrawerFragment中,可以通过以下代码实现NavigationView的点击事件:
NavigationView navigationView = (NavigationView) view.findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.nav_item_1:
fragment = ContentFragment.newInstance(1);
break;
case R.id.nav_item_2:
fragment = ContentFragment.newInstance(2);
break;
case R.id.nav_item_3:
fragment = ContentFragment.newInstance(3);
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
DrawerLayout drawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
drawerLayout.closeDrawer(GravityCompat.START);
}
return true;
}
});
其中,onNavigationItemSelected方法中根据点击的菜单项创建对应的ContentFragment,并将其替换到布局文件中的container中。最后,需要关闭DrawerLayout的侧滑菜单。
至此,一个基本的导航栏就实现了,可以通过添加菜单项和内容部分来扩展导航栏的功能。
阅读全文