android BottomNavigationView 底部显示3个以上的item
首先需要在(app)build.gradle 的dependencies里面引入
implementation 'com.google.android.material:material:1.0.0'
新建MainActivity找到对应的xml 加入viewpager 和 BottomNavigationView
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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=".MainActivity"> <androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/nav_view"/> <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu"/> </androidx.constraintlayout.widget.ConstraintLayout>
在res-menu 文件夹下新建 bottom_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home"/> <item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/title_dashboard"/> <item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications"/> </menu>
重写 MyPagerAdapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter class MyPagerAdapter(fm: FragmentManager,val fts:List<Fragment>) : FragmentPagerAdapter(fm) { override fun getItem(position: Int): Fragment {
return fts[position]
} override fun getCount(): Int {
return fts.size
} }
新建fragment 页面xml 就一个TextView就不贴了(这里就用一个fragment模拟一下,实际应该建立多个fragment类)
class HomeFragment : Fragment() {
private var param: String? = null
private lateinit var baseView:View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param = it.getString("param")
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
baseView = inflater.inflate(R.layout.fragment_home, container, false)
baseView.text.text = param
return baseView
}
}
现在开始在 MainActivity 写代码了
class MainActivity : AppCompatActivity() {
private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener {
when(it.itemId){
R.id.navigation_home -> {
viewpager.currentItem = 0
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
viewpager.currentItem = 1
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
viewpager.currentItem = 2
return@OnNavigationItemSelectedListener true
}
}
false
}
private val onPageChangeListener = object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
when(position){
0 -> {nav_view.selectedItemId = R.id.navigation_home}
1 -> {nav_view.selectedItemId = R.id.navigation_dashboard}
2 -> {nav_view.selectedItemId = R.id.navigation_notifications}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
nav_view.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
val f1 = HomeFragment()
var args = Bundle()
args.putString("param",getString(R.string.title_home))
f1.arguments = args
val f2 = HomeFragment()
args = Bundle()
args?.putString("param",getString(R.string.title_dashboard))
f2.arguments = args
val f3 = HomeFragment()
args = Bundle()
args?.putString("param",getString(R.string.title_notifications))
f3.arguments = args
val fts = listOf(f1, f2, f3)
val fm = supportFragmentManager
viewpager.adapter = MyPagerAdapter(fm,fts)
viewpager.addOnPageChangeListener(onPageChangeListener)
}
}
你现在可以用app:labelVisibilityMode="[labeled, unlabeled, selected, auto]
不设置默认就是 auto
labeled 所有的标签都是可见的。
unlabeled 只显示图标。
selected 将只显示选定项和移位项的标签。
auto 将根据您拥有的项目数选择“标记”或“选定”。标记为1-3项,选择为3+项。
android BottomNavigationView 底部显示3个以上的item的更多相关文章
- 014 Android BottomNavigationView 底部导航组件使用
1.导入BottomNavigationView组件(点击下载按钮,安装组件) 2.新建菜单 (1)app--->src-->main--->res ,选中res目录右击new--- ...
- Android TabWidget底部显示
TabHost控件默认使用LinearLayout包裹TabWidget和FrameLayout,布局文件如下: <TabHost xmlns:android="http://sche ...
- Android自定义底部带有动画的Dialog
Android自定义底部带有动画的Dialog 效果图 先看效果图,是不是你想要的呢 自定义Dialog package --.view; import android.app.Dialog; imp ...
- dialog自适应大小、固定大小、底部显示
创建一个从底部显示的对话框 if (dialog == null) { dialog = new Dialog(context, R.style.theme_from_bottom); View vi ...
- Android动态控制状态栏显示和隐藏
记得之前有朋友在留言里让我写一篇关于沉浸式状态栏的文章,正巧我确实有这个打算,那么本篇就给大家带来一次沉浸式状态栏的微技巧讲解. 其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先发 ...
- Android应用底部导航栏(选项卡)实例
现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...
- Android 全屏显示
Android全屏显示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst ...
- Android之垂直显示TextView
Android之垂直显示TextView 1因为界面需求原因,需要TextView垂直显示,话不多说,看代码,我也是搜的例子,在此感谢写这个例子的大神,在此做个笔记和分享给大家 2.用到了自定义控件的 ...
- Android 修改底部导航栏navigationbar的颜色
Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...
随机推荐
- java中科学计数法数字转字符串
开发过程中有可能会遇到很小的数字,在显示过程中就转换成了科学计数法,这种不利于人的观看,于是就有必要转成字符串形式的.so. 将科学计数法的数字转换成字符串: 使用的是java.math的BigDec ...
- socket基本使用
UDP发送和接收 MainRecv.cpp #include <iostream> #include <WinSock2.h> #include <sstream> ...
- Page Objects
Page Objects 原文地址:https://github.com/SeleniumHQ/selenium/wiki/PageObjects Within your web app's UI t ...
- mysql错误指令:Failed to open file "file_name" error 2/error 22
网上说Linux下可能会有此问题,及导入sql文件时出现如标题所示的错误.而我用的是windows系统,也出现了同样的问题. source filename | \. filename 执行这条语 ...
- linux LVM:物理卷逻辑卷
逻辑卷管理器,当分区不够用的时候,可以新建一个更大的分区再复制进去,但是浪费时间.Lvm可以弹性调整分区大小,可以动态组合分区.分区大小固定了就无法调整, apt-get update & a ...
- hdu1198 Farm Irrigation —— dfs or 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 dfs: #include<cstdio>//hdu1198 dfs #includ ...
- 未公开函数MessageBoxTimeOut 实现定时消息(ZT) MFC实现MessageBox自动消失
http://www.blogjava.net/baicker/archive/2007/07/13/130072.html #include <windows.h> #include & ...
- CodeForces - 840D:(主席树求出现区间出现次数大于某值的最小数)
Once, Leha found in the left pocket an array consisting of n integers, and in the right pocket q que ...
- codevs 1497取余运算
1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值. ...
- Qt工程pro文件的简单配置(尤其是第三方头文件和库)
Qt开发中,pro文件是对正工程所有源码.编译.资源.目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置) 注释 以”#”开始的行 ...