一,简介TabLayout是Android的Design库中的控件,常用于导航栏的实现;常用组合一般TabLayout结合ViewPager+Fragment的使用实现滑动的标签(头部导航栏或者标签栏)选择器。这篇不讲具体使用,主要讲如何单独监听每个tab的点击事件;
二,单独监听每个tab的点击事件
目前亲测的有两种:
2.1,单独使用TabLayout,代码中动态设置TabLayout的tab,然后为每个Tab单独设置点击事件;
xml布局
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tl_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Kotlin代码
class MainActivity : AppCompatActivity() {
var tl_demo: TabLayout? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tl_demo = findViewById(R.id.tl_test)
var tab1 : TabLayout.Tab? = tl_demo!!.newTab().setText("第一个tab")
var tab2 : TabLayout.Tab? = tl_demo!!.newTab().setText("第二个tab")
var tab3 : TabLayout.Tab? = tl_demo!!.newTab().setText("第三个tab")
var tab4 : TabLayout.Tab? = tl_demo!!.newTab().setText("第四个tab")
tl_demo!!.addTab(tab1!!)
tl_demo!!.addTab(tab2!!)
tl_demo!!.addTab(tab3!!)
tl_demo!!.addTab(tab4!!)
tab1.view?.setOnClickListener { Toast.makeText(this,"tab1",Toast.LENGTH_LONG).show() }
}
}
2.2,静态设置TabLayout的tab,为单个tab设置点击事件,
xml布局如下
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tl_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab1" />
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab2" />
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab3" />
</com.google.android.material.tabs.TabLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Kotlin代码实现Tab点击事件
class MainActivity : AppCompatActivity() {
var tl_demo: TabLayout? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tl_demo = findViewById(R.id.tl_test)
var tab1: TabLayout.Tab? = tl_demo!!.getTabAt(0)
tab1!!.view?.setOnClickListener { Toast.makeText(this,"tab1",Toast.LENGTH_LONG).show() }
}
}