kotlin 底部导航栏(tabLayout + fragment)
来源:互联网 发布:视频大数据什么意思 编辑:程序博客网 时间:2024/06/05 12:39
准备工作
在build.grale中添加
compile "com.android.support:design:$support_version"
1.编辑main_activity.xml
确定主页面布局FrameLayout +TabLayout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zyqzyq.eyepetizer.activities.MainActivity"> <FrameLayout android:id="@+id/main_container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <View android:layout_width="match_parent" android:layout_height=".5dp" android:alpha=".6" android:background="@android:color/darker_gray"/> <android.support.design.widget.TabLayout android:id="@+id/bottom_tab_layout" android:layout_width="match_parent" android:layout_height="50dp" app:tabIndicatorHeight="0dp" app:tabSelectedTextColor="@android:color/black" app:tabTextColor="@android:color/darker_gray"> </android.support.design.widget.TabLayout></LinearLayout>
2.创建tabView.xml
因为默认的tablayout添加icon显示后图片显得较小(选择了setCustomView方法,需要自定义view)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:id="@+id/tab_content_image" android:scaleType="fitCenter" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tab_content_text" android:textSize="@dimen/tabTextSize" android:textColor="@android:color/darker_gray"/></LinearLayout>
3.编辑MainActivity.kt
信息存在了object中,方便修改
“`
object MainData {
val mainFragmentList = arrayOf(HomeFragment(), FindFragment(), FollowFragment(), MineFragment())
val mainTabRes = listOf(R.mipmap.ic_tab_home,R.mipmap.ic_tab_find,
R.mipmap.ic_tab_follow,R.mipmap.ic_tab_mine)
val mainTabResPressed = listOf(R.mipmap.ic_tab_home_selected,R.mipmap.ic_tab_find_selected,
R.mipmap.ic_tab_follow_selected,R.mipmap.ic_tab_mine_selected)
val mainTabStr = listOf(“首页”,”发现”,”关注”,”我的”)
}
默认添加了4个tab,并设置Tab 选中之后,改变各个Tab的状态
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initView()
}
private fun initView(){
bottom_tab_layout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
onTabItemSelected(tab.position)
// Tab 选中之后,改变各个Tab的状态
for (i in 0 until bottom_tab_layout.tabCount ) {
val view = bottom_tab_layout.getTabAt(i)!!.customView
if (i == tab.position) { // 选中状态 view?.tab_content_image?.setImageResource(MainData.mainTabResPressed[i]) view?.tab_content_text?.setTextColor(resources.getColor(android.R.color.black)) } else {// 未选中状态 view?.tab_content_image?.setImageResource(MainData.mainTabRes[i]) view?.tab_content_text?.setTextColor(resources.getColor(android.R.color.darker_gray)) } } } override fun onTabUnselected(tab: TabLayout.Tab) { } override fun onTabReselected(tab: TabLayout.Tab) { } }) for(i in 0..3) { bottom_tab_layout.addTab(bottom_tab_layout.newTab().setCustomView(getTabView(this, i))) }}private fun getTabView(context: Context,position: Int): View{ val view = LayoutInflater.from(context).inflate(R.layout.tabview, null) view.tab_content_image.setImageResource(MainData.mainTabRes[position]) view.tab_content_text.text = MainData.mainTabStr[position] return view}
#添加fragment新建home_framgment.kt代码如下
class HomeFragment: Fragment(){
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
return inflater!!.inflate(R.layout.fragment_home,container,false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState)}
}
新建fragment_home.xml```<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="home fragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView"/></LinearLayout><div class="se-preview-section-delimiter"></div>
重复上述操作新建4个fragment。
5.在MainActivity.kt添加fragment的更新
添加函数onTabItemSelected
fun onTabItemSelected(position: Int){ val transaction = fragmentManager.beginTransaction() transaction.replace(R.id.main_container, MainData.mainFragmentList[position]).commit() }
并在onTabSelected中调用。
6.最终效果图如下
- kotlin 底部导航栏(tabLayout + fragment)
- tablayout底部导航栏
- TabLayout+ViewPager+Fragment实现顶部或底部导航栏
- Tablayout + ViewPager + fragment 实现底部或顶部导航栏
- Android底部和标签导航栏—TabLayout+Fragment
- Android 用 TabLayout + ViewPager + Fragment 实现顶部、底部导航栏
- 首页、底部导航栏:TabLayout+ViewPager+Fragment使用
- Android开发:顶部&底部Tab导航栏实现(TabLayout+ViewPager+Fragment)
- TabLayout+ViewPager+Fragment实现底部导航
- TabLayout+ViewPager+Fragment实现底部导航
- TabLayout+Fragment和底部导航联动
- TabLayout实现底部导航栏
- Android项目导航栏之仿微信底部导航栏TabLayout+ViewPager+Fragment
- Android底部导航栏实现(四)之TabLayout+ViewPager
- TabLayout+ViewPager+Fragment实现带图标和文字的底部导航栏
- 首页-底部&顶部Tab导航(菜单栏)的实现:TabLayout+ViewPager+Fragment
- TabLayout+ViewPager实现滑动底部导航栏
- 用TabLayout实现底部导航栏
- .NET之三分钟学会玩C#委托
- 编程题之——KMP算法Java实现
- HTTP中Get与Post的区别
- CodeForces
- 二维码扫描--基于bingoogolapple + Android Studio 2.3.3
- kotlin 底部导航栏(tabLayout + fragment)
- python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器
- ssm-dao层设计整理
- unity 不用事先写结构体或类的Json解析器
- CF848,第一次参加div1
- 移动端h5页面点透问题
- Linux 环境下使用g++编译C++
- 封装_练习
- java 字符的解码和编码