| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 移动开发 -> Kotlin使用Viewpager2+Fragment+BottomNavigationView实现底部菜单栏的切换模块的样式。 -> 正文阅读 |
|
|
[移动开发]Kotlin使用Viewpager2+Fragment+BottomNavigationView实现底部菜单栏的切换模块的样式。 |
|
效果图:
实现步骤: 1.首先在app的builde文件中引用ViewPager2 implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01' 2.添加首页的布局xml <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/mainViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/navigationView" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FFFFFF" />
</RelativeLayout>
3.创建home Activity页面 package com.example.tasklayoutdemo
import android.content.Context
import android.content.Intent
import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2
import com.example.tasklayoutdemo.base.BaseAppActivity
import com.example.tasklayoutdemo.fragment.*
import com.google.android.material.bottomnavigation.LabelVisibilityMode
import kotlinx.android.synthetic.main.home_activity.*
class Home : BaseAppActivity() {
companion object {
fun startHomeActivity(context: Context) {
context.startActivity(Intent(context, Home::class.java))
}
//传递参数
fun startHomeActivity2(
context: Context,
userid: String,
token: String
) {
context.startActivity(Intent(context, Home::class.java).apply {
putExtra("UserId", userid)
putExtra("Token", token)
})
}
}
override fun getLayout(): Int {
return R.layout.home_activity
}
override fun initView() {
}
override fun initDate() {
val fragmentArr = ArrayList<Fragment>()
fragmentArr.add(ShoeYeFragment.instance)
fragmentArr.add(InfoFragment.instance)
fragmentArr.add(FindFragment.instance)
fragmentArr.add(MineFragment.instance)
navigationView.menu.add(0, 0, 1, "首页").setIcon(R.drawable.tab_1)
navigationView.menu.add(0, 1, 1, "消息").setIcon(R.drawable.tab_2)
navigationView.menu.add(0, 2, 1, "园地").setIcon(R.drawable.tab_4)
navigationView.menu.add(0, 3, 1, "我的").setIcon(R.drawable.tab_3)
/**
* 否禁止用户滑动页面
* */
mainViewPager.isUserInputEnabled = false
/**
* 设置ViewPager2的滑动监听事件
* isUserInputEnabled = true 时
* */
mainViewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
//设置导航栏选中位置
navigationView.menu.getItem(position).setChecked(true)
}
})
mainViewPager.adapter = PagerAdapter(this, fragmentArr)
navigationView.labelVisibilityMode = LabelVisibilityMode.LABEL_VISIBILITY_LABELED
/**
* 设置导航栏菜单项Item选中监听
* */
navigationView.setOnNavigationItemSelectedListener {
mainViewPager.currentItem = it.itemId
true
}
}
}
4.创建对应的Fragment页面(示例中需创建四个,我贴出来一个代码,其他的一样) package com.example.tasklayoutdemo.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.tasklayoutdemo.R
import kotlinx.android.synthetic.main.shouye_fragment.*
class ShoeYeFragment : Fragment() {
companion object {
val instance: ShoeYeFragment by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
ShoeYeFragment()
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.shouye_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
tv_content.text = "我是Fragment,首页...."
}
}
Fragment对应布局文件 ........ 5.创建 PagerAdapter? package com.example.tasklayoutdemo.fragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
class PagerAdapter : FragmentStateAdapter {
private var fragments: List<Fragment>
constructor(fragmentActivity: FragmentActivity, fragments: List<Fragment>) : super(
fragmentActivity
) {
this.fragments = fragments
}
constructor(fragment: Fragment, fragments: List<Fragment>) : super(
fragment
) {
this.fragments = fragments
}
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
6.添加导航栏图标 完成,运行即可 7.进阶 其中app:itemTextColor="@drawable/main_bottom"为设置按钮选中与未选中时字体的颜色选择 app:itemIconTint="@drawable/main_bottom"为设置按钮选中与未选中时图标的颜色选择 main_bottom.xml文件为: <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_red_light" android:state_checked="true" />
<item android:color="@color/black" android:state_checked="false" />
</selector>
|
|
|
| 移动开发 最新文章 |
| Vue3装载axios和element-ui |
| android adb cmd |
| 【xcode】Xcode常用快捷键与技巧 |
| Android开发中的线程池使用 |
| Java 和 Android 的 Base64 |
| Android 测试文字编码格式 |
| 微信小程序支付 |
| 安卓权限记录 |
| 知乎之自动养号 |
| 【Android Jetpack】DataStore |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/29 3:16:39- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |