Android中TabLayout+ViewPager实现Fragment切换
如图:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
MainActivity
package com.example.mytablayout
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater
import android.widget.TableLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout
class MainActivity : AppCompatActivity() {
private lateinit var tabLayout: TabLayout
private lateinit var viewPager: ViewPager
private lateinit var devGroupList: ArrayList
private lateinit var viewPagerAdapter: ShortcutViewPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tabLayout = findViewById(R.id.tableLayout)
viewPager = findViewById(R.id.viewPager)
initData()
initAdapter()
}
private fun initData() {
devGroupList = ArrayList()
devGroupList.add("Tab1")
devGroupList.add("Tab2")
}
private fun initAdapter() {
viewPagerAdapter = ShortcutViewPagerAdapter(supportFragmentManager, devGroupList)
viewPager.adapter = viewPagerAdapter
viewPager.offscreenPageLimit = 5
tabLayout.setupWithViewPager(viewPager)
tabLayout.addOnTabSelectedListener(object :TabLayout.OnTabSelectedListener{
override fun onTabSelected(tab: TabLayout.Tab?) {
val customView = tab?.customView as TextView?
customView?.setTextSize(TypedValue.COMPLEX_UNIT_PX,DesUtils.sp2px(application,16F).toFloat())
customView?.setTextColor(ContextCompat.getColor(application, R.color.white))
customView?.setBackgroundColor(Color.parseColor("#00FF00"))
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
val customView = tab?.customView as TextView?
customView?.setTextSize(TypedValue.COMPLEX_UNIT_PX, DesUtils.sp2px(application,12F).toFloat())
customView?.setTextColor(ContextCompat.getColor(application, R.color.white_90))
customView?.setBackgroundColor(Color.parseColor("#FF1278"))
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
})
initTabView()
}
// 初始化 Tab layout
private fun initTabView() {
for (i in 0 until tabLayout.tabCount) {
val tab = tabLayout.getTabAt(i)
val tabView = if (tab?.isSelected == true) {
LayoutInflater.from(this).inflate(
R.layout.tab_item_title_focused, tabLayout, false)
} else {
LayoutInflater.from(this).inflate(
R.layout.tab_item_title, tabLayout, false)
}
val tvTitle = tabView.findViewById(R.id.tv_title)
tvTitle.text = devGroupList[i]
tab?.customView = tabView
}
}
}
PagerAdapter
package com.example.mytablayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.example.mytablayout.fragments.DeviceGridFragment
import com.example.mytablayout.fragments.SceneGridFragment
class ShortcutViewPagerAdapter(
private val fragmentManager: FragmentManager,
private val devGroupList: List,
): FragmentPagerAdapter(fragmentManager) {
override fun getCount(): Int {
return devGroupList.size
}
override fun getItem(position: Int): Fragment {
if (position == 0) {
return DeviceGridFragment()
} else if (position == 1) {
return SceneGridFragment()
}
return DeviceGridFragment()
}
/*override fun getPageTitle(position: Int): CharSequence? {
return devGroupList[position]
}*/
}
tab_item_title_focused.xml
<?xml version="1.0" encoding="utf-8"?>
tab_item_title.xml
<?xml version="1.0" encoding="utf-8"?>