写TabLayout的时候,发现如果一个Tab中的字很少,它的宽度会是下图这样的:虽然字很短,但是和右边的Tab几乎是一样宽的。 但是我想要每个Tab的文字看起来是等间距的。如下图的样子。 这时因为TabLayout的最小宽度比我想要的要宽。那就需要强行手动改一下Tab的最小间距了。
需要注意的是,还需要将tabMode设置为scrollable才能生效,fixed是不生效的。
代码如下。
重写下TabLayout:
package com.project.testtablayout import android.content.Context import android.util.AttributeSet import androidx.annotation.AttrRes import com.google.android.material.tabs.TabLayout class MinSpacingTabLayout : TabLayout { constructor(context: Context) : super(context) { initMinWidth() } constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { initMinWidth() } constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr) { initMinWidth() } private fun initMinWidth() { try { val field = TabLayout::class.java.getDeclaredField("scrollableTabMinWidth") field.isAccessible = true // 设定最小的间距 field.set(this, 10) } catch (e: Exception) { e.printStackTrace() } } }下面是简单的布局代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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.project.testtablayout.MinSpacingTabLayout android:id="@+id/tab_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" app:tabGravity="center" app:tabIndicatorColor="#FF5000" app:tabIndicatorHeight="3dp" app:tabMode="scrollable" app:tabPaddingEnd="10dp" app:tabPaddingStart="10dp" app:tabRippleColor="#00ffffff" /> <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager_home" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </RelativeLayout>MainActivity:
package com.project.testtablayout import android.graphics.Color import android.graphics.Typeface import android.os.Bundle import android.view.ViewGroup import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { private val titles = arrayListOf("-1", "我是1", "我是000", "33子", "我是贼长贼长的444", "短5"); override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initTabLayout() } private fun initTabLayout() { titles.forEachIndexed { index, s -> tab_layout.addTab(tab_layout.newTab()); tab_layout.getTabAt(index)?.apply { val tabView = TextView(this@MainActivity) tabView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) tabView.text = titles[index] tabView.textSize = 14F tabView.setTextColor(Color.parseColor("#666666")) tabView.typeface = Typeface.defaultFromStyle(Typeface.NORMAL) customView = tabView tag = index } } tab_layout.getTabAt(0)?.select() } }简单记录一下。
