android 不固定tab,android – Tabs不适合使用tabmode = scrollable的屏幕,即使使用自定义选项卡布局...

我使用ViewPager创建了一个自定义TabLayout,并在可滚动模式下使用TabLayout:

我需要它可以滚动,因为日期的数量可以变化到多达15-20:

android:id="@+id/tab_layout_movie"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="?attr/colorPrimary"

android:elevation="6dp"

android:minHeight="?attr/actionBarSize"

app:tabGravity="fill"

app:tabMode="scrollable"

app:tabTextAppearance="?android:textAppearanceMedium"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

自定义tablayout类是:

package com.example.project.recommendedapp;

import android.content.Context;

import android.graphics.Point;

import android.support.design.widget.TabLayout;

import android.util.AttributeSet;

import android.util.Log;

import android.view.Display;

import android.view.WindowManager;

import java.lang.reflect.Field;

public class CustomScrollableTabLayout extends TabLayout {

private Context mContext;

Point size;

public CustomScrollableTabLayout(Context context) {

super(context);

mContext=context;

size = new Point();

}

public CustomScrollableTabLayout(Context context, AttributeSet attrs) {

super(context, attrs);

mContext=context;

size = new Point();

}

public CustomScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

mContext=context;

size = new Point();

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

try {

if (getTabCount() == 0) {

return;

}else {

Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

display.getSize(size);

int width = size.x;

Field field = TabLayout.class.getDeclaredField("mScrollableTabMinWidth");

field.setAccessible(true);

field.set(this, (width / getTabCount()));

Log.d("FragmentCreate",String.valueOf(width / getTabCount()));

}

} catch (Exception e) {

Log.e("FragmentCreate","Error while setting width",e);

}

}

}

2d2925c4dc82fa97bdc8e0e05a365071.png

解决方法:

我全神贯过地寻找这个问题的答案.在我的情况下,我是动态添加和删除标签,所以我希望它只有几个标签填充屏幕,但是当有太多而不是缩小它们或将标题放在两行时开始滚动.使用以下自定义选项卡布局终于让它适合我.在调用super.onMeasure()之前设置最小宽度是关键.

public class CustomTabLayout extends TabLayout {

public CustomTabLayout(Context context) {

super(context);

}

public CustomTabLayout(Context context, AttributeSet attrs) {

super(context, attrs);

}

public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

ViewGroup tabLayout = (ViewGroup)getChildAt(0);

int childCount = tabLayout.getChildCount();

if( childCount != 0 ) {

DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();

int tabMinWidth = displayMetrics.widthPixels/childCount;

for(int i = 0; i < childCount; ++i){

tabLayout.getChildAt(i).setMinimumWidth(tabMinWidth);

}

}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

}

将选项卡模式设置为在xml中可滚动.

android:id="@+id/my_tabs"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabMode="scrollable">

标签:android-tablayout,android

来源: https://codeday.me/bug/20190928/1825268.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值