效果图
<?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"
android:background="@color/white">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@android:color/transparent">
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_scrollFlags="scroll"
app:layout_collapseMode="pin">
<!-- Banner -->
<ImageView
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#2CECA9"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#40B2E6"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="标题"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- 标签指示器 -->
<net.lucode.hackware.magicindicator.MagicIndicator
android:id="@+id/mag_tab"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginTop="15dp" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="15dp"/>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
activity代码
class MainActivity :BaseActivity() {
private lateinit var binding:ActivityMainBinding
private var titles = mutableListOf("美食","电器","家具","箱包","服饰")
private var fragments = mutableListOf<Fragment>()
override fun getLayout(): View? {
binding = ActivityMainBinding.inflate(layoutInflater)
return binding.root
}
override fun initData() {
fragments.clear()
for (i in titles.indices){
var fragment = TestFragment()
var bundle = Bundle()
bundle.putString("title",titles[i])
fragment.arguments = bundle
fragments.add(fragment)
}
binding.vpList.currentItem = 1
binding.vpList.adapter = PagerAdapter(supportFragmentManager,fragments,titles)
initMagicIndicator(binding.vpList,binding.magTab)
}
//初始化table
private fun initMagicIndicator(vpList: ViewPager, tab: MagicIndicator) {
val commonNavigator = CommonNavigator(this)
commonNavigator.isAdjustMode = true
commonNavigator.isSkimOver = true
commonNavigator.adapter = object : CommonNavigatorAdapter() {
override fun getCount(): Int {
return if (titles == null) 0 else titles.size
}
override fun getTitleView(context: Context, index: Int): IPagerTitleView {
val simplePagerTitleView: SimplePagerTitleView =
TransitionPagerTitleView(context)
simplePagerTitleView.text = titles[index]
simplePagerTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,16f)
simplePagerTitleView.normalColor = Color.parseColor("#999999")
simplePagerTitleView.selectedColor = Color.parseColor("#333333")
simplePagerTitleView.setPadding(14,0,14,0)
simplePagerTitleView.setOnClickListener { vpList.currentItem = index }
return simplePagerTitleView
}
override fun getIndicator(context: Context): IPagerIndicator {
val indicator = LinePagerIndicator(context)
indicator.setColors(Color.parseColor("#40c4ff"))
indicator.mode = LinePagerIndicator.MODE_EXACTLY
indicator.lineHeight = UIUtil.dip2px(context, 3.0).toFloat()
indicator.lineWidth = UIUtil.dip2px(context, 40.0).toFloat()
indicator.roundRadius = UIUtil.dip2px(context, 3.0).toFloat()
indicator.startInterpolator = AccelerateInterpolator()
indicator.endInterpolator = DecelerateInterpolator(2.0f)
indicator.setColors(Color.parseColor("#FF7D8E"))
return indicator
}
}
tab.navigator = commonNavigator
val titleContainer = commonNavigator.titleContainer // must after setNavigator
titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
titleContainer.dividerPadding = UIUtil.dip2px(this, 15.0)
ViewPagerHelper.bind(tab, vpList)
}
fragment代码
class TestFragment:BaseFragment() {
private lateinit var binding:FragTestBinding
private var adapter = TestAdapter()
private var list = mutableListOf<String>()
override fun getLayout(): View? {
binding = FragTestBinding.inflate(layoutInflater)
return binding.root
}
override fun initData() {
var title = arguments?.getString("title")
var layoutManager = LinearLayoutManager(activity)
layoutManager.orientation = LinearLayoutManager.VERTICAL
binding.recyList.layoutManager = layoutManager
binding.recyList.adapter = adapter
for (i in 0..20){
list.add("$title")
}
adapter.submitList(list)
}
}
adapter就不贴了 就是普通的adapter不需要任何处理 最主要的是xml布局,其它的内容就是填充布局就好了
需要引入
implementation 'com.google.android.material:material:1.8.0'