实验 用fragment实现底部导航条 界面如下图所示,底部有4个导航图标分别为提醒、消息、收藏和我的,点击底部4分图标,在屏幕主区加载相应的Fragment,界面标题、图标颜色和背景也相应改变。实现滑屏(左右滑动,底部图标跟着移动)功能
时间: 2024-05-05 16:20:50 浏览: 5
好的,这里提供一下实现的思路:
1.创建4个Fragment分别对应4个导航图标,每个Fragment对应一个布局文件。
2.在主界面中添加一个FrameLayout作为Fragment的容器,用于加载Fragment。
3.创建一个底部导航栏布局,在布局中添加4个ImageView作为导航图标。
4.监听底部导航栏的点击事件,根据点击的位置加载对应的Fragment,并改变标题、图标颜色和背景。
5.通过ViewPager和FragmentPagerAdapter实现滑屏功能,底部导航栏随着滑动位置改变。
下面是示例代码:
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private ImageView ivRemind, ivMessage, ivFavorite, ivMine;
private TextView tvTitle;
private FrameLayout flContainer;
private ViewPager viewPager;
private List<Fragment> fragmentList;
private int[] iconNormal = {R.drawable.icon_remind_normal, R.drawable.icon_message_normal, R.drawable.icon_favorite_normal, R.drawable.icon_mine_normal};
private int[] iconSelected = {R.drawable.icon_remind_selected, R.drawable.icon_message_selected, R.drawable.icon_favorite_selected, R.drawable.icon_mine_selected};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initListener();
}
private void initView() {
ivRemind = findViewById(R.id.iv_remind);
ivMessage = findViewById(R.id.iv_message);
ivFavorite = findViewById(R.id.iv_favorite);
ivMine = findViewById(R.id.iv_mine);
tvTitle = findViewById(R.id.tv_title);
flContainer = findViewById(R.id.fl_container);
viewPager = findViewById(R.id.view_pager);
}
private void initData() {
fragmentList = new ArrayList<>();
fragmentList.add(new RemindFragment());
fragmentList.add(new MessageFragment());
fragmentList.add(new FavoriteFragment());
fragmentList.add(new MineFragment());
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
viewPager.setOffscreenPageLimit(4);
viewPager.setCurrentItem(0);
setSelected(0);
}
private void initListener() {
ivRemind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(0);
setSelected(0);
}
});
ivMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(1);
setSelected(1);
}
});
ivFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(2);
setSelected(2);
}
});
ivMine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(3);
setSelected(3);
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void setSelected(int position) {
ivRemind.setImageResource(iconNormal[0]);
ivMessage.setImageResource(iconNormal[1]);
ivFavorite.setImageResource(iconNormal[2]);
ivMine.setImageResource(iconNormal[3]);
switch (position) {
case 0:
ivRemind.setImageResource(iconSelected[0]);
tvTitle.setText("提醒");
break;
case 1:
ivMessage.setImageResource(iconSelected[1]);
tvTitle.setText("消息");
break;
case 2:
ivFavorite.setImageResource(iconSelected[2]);
tvTitle.setText("收藏");
break;
case 3:
ivMine.setImageResource(iconSelected[3]);
tvTitle.setText("我的");
break;
}
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
}
```
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_above="@+id/bottom_layout"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/bottom_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FFFFFF"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_remind"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/icon_remind_normal" />
<ImageView
android:id="@+id/iv_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/icon_message_normal" />
<ImageView
android:id="@+id/iv_favorite"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/icon_favorite_normal" />
<ImageView
android:id="@+id/iv_mine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/icon_mine_normal" />
</LinearLayout>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_above="@+id/bottom_layout"
android:background="#2196F3"
android:gravity="center"
android:text="提醒"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_above="@+id/bottom_layout"
android:layout_weight="1" />
</RelativeLayout>
```
RemindFragment.java
```java
public class RemindFragment extends Fragment {
public RemindFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_remind, container, false);
return view;
}
}
```
fragment_remind.xml
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提醒页面"/>
</LinearLayout>
```
其他Fragment和布局文件类似,这里就不赘述了。