如何在底部导航栏始终保留在屏幕上的情况下启动不同的活动。例如,如果我单击底部导航栏中的选项卡,它会启动谷歌地图视图,我该如何使它仍然可以看到底部导航栏。非常像YouTube应用程序,底部导航栏始终存在。如果我能被指出正确的方向,那就太好了,我可以自己做研究
Fragment
是活动的模块化部分,它有自己的生命周期,有自己的布局、视图......(有点像"子活动"( 使用片段的另一个明显优势是跨不同屏幕的UI优化,它使您可以在一个活动中管理多个页面。 现在请按照以下步骤操作:
-
使您的主要活动扩展
FragmentActivity
:public class MainActivity extends FragmentActivity { ... }
-
将主活动布局更改为如下所示:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.yourComp.appName.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/body" android:layout_width="match_parent" android:layout_height="0dp" android:layout_above="@id/footer" /> <LinearLayout android:id="@+id/footer" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignParentBottom="true" android:orientation="horizontal" /> </RelativeLayout>
-
创建一个新的 FragmentPagerAdapter 如下所示,我定义了 3 个页面,但您可能想更改它,请记住您必须创建一个 Fragment 而不是您需要的每个活动:
public class FragmentAdapter extends FragmentPagerAdapter { static final int NUMBER_OF_PAGES = 3; Context context; public FragmentAdapter(android.support.v4.app.FragmentManager fm, Context context) { super(fm); this.context = context; } @Override public int getCount() { return NUMBER_OF_PAGES; } @Override public android.support.v4.app.Fragment getItem(int position) { switch (position) { case 0: return new Fragment1(); case 1: return new Fragment2(); case 2: return new Fragment3(); default: return null; } } }
-
现在转到Android工作室,单击">文件>新建>片段>片段(空白(",然后创建之前
FragmentAdapter
中列出的片段。此片段有效,而不是您的活动。 -
最后将这一行添加到您的主活动 OnCreate 方法中,目的是在主活动布局上绑定之前使用 viewPager 声明的片段:
ragmentAdapter = new FragmentAdapter(((FragmentActivity) this).getSupportFragmentManager(), this); ViewPager pager = (ViewPager) findViewById(R.id.body); viewPager.setAdapter(fragmentAdapter);
现在设计您自己的自定义页脚视图或使用底部导航视图。用户可以在片段之间滑动,也可以使用此方法以编程方式更改页面:
viewPager.setCurrentItem(n); // n is fragment number that decleared in adapter 0,1,2
此外,您可能希望禁用用户手动滑动,如此处所述。
是的,您也可以将底部导航与活动一起使用,但您必须创建导航视图所有其他活动并设置侦听器。 例如,像YouTube一样,比方说,第一个活动是具有导航视图的主页。 然后您单击"趋势",趋势活动打开。 在趋势活动中,您必须再次创建导航视图。