<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:minHeight="?attr/actionBarSize"
android:background="@color/primary_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/AppTheme"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabIndicatorColor="@color/red"
app:tabIndicatorHeight="3dp"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_below="@+id/app_bar_layout"/>
</android.support.design.widget.CoordinatorLayout>
我为标签设置了自定义用户界面:
private TabLayout mTabLayout;
for (int i = 0; i < TITLES.length; i++) {
RelativeLayout tabView = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.custom_tab, null);
mTabLayout.getTabAt(i).setCustomView(tabView);
}
以下是我的自定义用户界面: custom_tab.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Title"
android:textSize="14sp"/>
当我增加文本视图的上述高度时,Tablayout的高度不会增加,并且标签中的自定义视图会从底部切断。
我认为Tablayout的高度是如何固定的(可能是动作栏的高度),甚至将它的高度改为&#34; match_parent&#34;不起作用。
如何增加Tablayout的高度?我有什么不对的吗?
答案 0 :(得分:0)
TabLayout的高度小于48个DIP似乎受到限制。
看看TabLayout的onMeasure方法和how it calculates height.
onMeasure方法基于来自TabLayout.DEFAULT_HEIGHT
的硬编码DIP值计算“ idealHeight”。
由于这是“材料设计”小部件的布局,因此Google可能希望确保在某些重要组成的可触摸高度规则方面,您不会违反其“材料设计”规范:-P
我通过子类化TabLayout并将其高度设置为恰好与其第一个子项(tabStrip)高度匹配的方式来解决此问题。
请务必通过super.onMeasure进行调用,以便可以测量此View的子级。在致电tabStrip.getMeasuredHeight()
@NonNull private ViewGroup tabStrip;
public CustomTabLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
tabStrip = (ViewGroup) getChildAt(0);
tabStrip.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// Force the height of this ViewGroup to be the same height of the tabStrip
setMeasuredDimension(getMeasuredWidth(), tabStrip.getMeasuredHeight());
}