android:Kotlin+viewpager+BottomNavigationView+fragment实现滑动页面及底部导航键
//2020/11/20 今天重新将下面的教程写详细一点。
- 首先在该activity布局内添加如下代码(以下代码中id可自行命名)就是在布局文件里加了viewpager和borronmNavigationview
其中 android:layout_gravity="bottom"是将控件固定在底部
app:labelVisibilityMode=“labeled” 是让文字全部显示
然后borronmNavigationview这里有两个引入的布局文件
select_home_botton和home_button
前者需要在res下添加color包再在包里添加xml文件 如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#45000000"
android:state_checked="false"/>
<item android:color="#03A9F4"
android:state_checked="true"/>
</selector>
后者则需要在res下创建menu包 包内创建xml文件 如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/pet_interface"
android:checked="true"
android:title="//你的按钮名字"
android:icon="//图标"/>
...
</menu>
下面就是要添加到该view的布局文件内的代码块也就是在xml内添加这两个要用到的控件borronmNavigationview和viewpager
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/page"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:id="@+id/but_home"
android:layout_height="wrap_content"
app:itemIconTint="@color/select_home_botton"
app:labelVisibilityMode="labeled"
app:itemTextColor="@color/select_home_botton"
app:menu="@menu/home_button"
android:layout_gravity="bottom"/>
- 创建你想要的fragment个数个fragment,这里就不展示代码了。
- 在com.example.****下创建一个适配器就叫FragmentAdapter叭
- 然后在适配器里添加如下代码:
open class FragmentAdapter(list:List<Fragment>, fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {
val mFragments : List<Fragment> = list
override fun getCount(): Int {
return mFragments.size
}
override fun getItem(position: Int): Fragment {
return mFragments.get(position)
}
然后打开该activity在onCreat()方法里添加如下代码(这里我是建了三个fragment分别是bianqianFragment,haojuFragment,meiwenFragment)
val fragments = mutableListOf<Fragment>()
fragments.add(bianqianFragment())
fragments.add(haojuFragment())
fragments.add(meiwenFragment())
//初始化数据
val fragmentAdapter = FragmentAdapter(fragments, supportFragmentManager)
page.adapter=fragmentAdapter
//添加适配器
//底部导航栏(下面)
but_home.setOnNavigationItemSelectedListener {
when(it.itemId) {
R.id.home -> page.currentItem=0
R.id.mingyan ->page.currentItem=1
R.id.meiwen ->page.currentItem=2
}
false
}
//page滑动监听(下面)
page.addOnPageChangeListener(object : ViewPager.OnPageChangeListener{
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
}
override fun onPageSelected(position: Int) {
but_home.menu.getItem(position).isChecked=true
}
override fun onPageScrollStateChanged(state: Int) {
}
})
!!!!!(以上可能需要导库,具体自行查询)
算了还是写出来叭
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'