Android 如何在TabLayout中设置固定计数?
我将TabLayout与viewPager一起使用,viewPager使用RecyclerView来表示它的片段,它扩展了FragmentStatePageAdapter 这一切都很好。 但是,我有一个场景,我想在可滚动模式下(当tabMode设置为可滚动时)将tabLayout的项目数设置为仅(7) 不知何故,当tabLayout设置为scrollable时,它只为每个设备设置5个项目,但在我的场景中,我希望它调整7个项目,而不考虑任何设备 我尝试将项目宽度设置为totalDeviceWidt/7,但没有成功,因为它仍然使用相同的宽度 我还尝试通过编写自定义tabLayout来重写onMeasure()方法。但是,没有运气 我不确定问题是否出在pagerTabStrip上,或者当tabMode设置为可滚动时,viewPager和TableLayout如何计算要修复的项目数 我在过去三天一直在处理这个问题 这是我的主要xml布局Android 如何在TabLayout中设置固定计数?,android,android-viewpager,android-tablayout,Android,Android Viewpager,Android Tablayout,我将TabLayout与viewPager一起使用,viewPager使用RecyclerView来表示它的片段,它扩展了FragmentStatePageAdapter 这一切都很好。 但是,我有一个场景,我想在可滚动模式下(当tabMode设置为可滚动时)将tabLayout的项目数设置为仅(7) 不知何故,当tabLayout设置为scrollable时,它只为每个设备设置5个项目,但在我的场景中,我希望它调整7个项目,而不考虑任何设备 我尝试将项目宽度设置为totalDeviceWidt
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.movie.bms.views.activities.TimeActivity"
tools:showIn="@layout/activity_time"
>
<android.support.design.widget.TabLayout
android:id="@+id/time_sliding_tab"
android:layout_width="match_parent"
android:layout_height="61.8dp"
android:background="#06acef"
android:elevation="0dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:elevation="@dimen/elevation.small"
app:tabGravity="center"
app:tabIndicatorColor="@color/white"
app:tabMode="scrollable"
app:tabPaddingEnd="-1dp"
app:tabPaddingStart="-1dp"
android:fillViewport="false"
></android.support.design.widget.TabLayout>
<com.utils.customcomponents.CustomViewPager
android:id="@+id/time_view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:transitionName="@string/event_body_transition">
</com.utils.customcomponents.CustomViewPager>
</LinearLayout>
任何形式的帮助或建议都将不胜感激 您可以通过在xml表格布局上设置
app:tabMinWidth
和app:tabMaxWidth
元素来影响选项卡的实际宽度
例如,对于Nexus 5(360dp):
。(根据屏幕宽度计算)
在现有TabLayout实例上使用以设置mRequestedTabMinWidth
和mRequestedTabMaxWidth
专用字段。(不推荐)
反射案例如何工作的示例:
导入android.content.Context;
导入android.support.design.widget.TabLayout;
导入android.util.AttributeSet;
导入java.lang.reflect.Field;
公共类SevenTabLayout扩展表布局{
公共类SetTabWidthException扩展RuntimeException{
}
public SevenTabLayout(上下文){
超级(上下文);
}
public SeventBlayout(上下文、属性集属性){
超级(上下文,attrs);
初始化etabwidths();
}
public SevenTabLayout(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
初始化etabwidths();
}
公共无效初始值etabwidths(){
int tabwidth=140;//屏幕大小除以7
setPrivateField(“mRequestedTabMinWidth”,tabwidth);
setPrivateField(“mRequestedTabMaxWidth”,tabwidth);
}
私有void setPrivateField(字符串tabMinWidthFieldName,int值){
试一试{
字段f=TabLayout.class.getDeclaredField(tabMinWidthFieldName);
f、 setAccessible(true);
f、 setInt(这个值);
}捕获(无此字段例外){
抛出新的SetTabWidthException();
}捕获(非法访问异常e2){
抛出新的SetTabWidthException();
}
}
}
现在,您可以轻松地为InitializeTabWidth()
方法添加一个单元测试,以便在升级设计支持库后检测它何时停止工作。您可以通过在xml格式的TabLayout上设置app:tabMinWidth
和app:tabMaxWidth
元素来影响选项卡的实际宽度
例如,对于Nexus 5(360dp):
。(根据屏幕宽度计算)
在现有TabLayout实例上使用以设置mRequestedTabMinWidth
和mRequestedTabMaxWidth
专用字段。(不推荐)
反射案例如何工作的示例:
导入android.content.Context;
导入android.support.design.widget.TabLayout;
导入android.util.AttributeSet;
导入java.lang.reflect.Field;
公共类SevenTabLayout扩展表布局{
公共类SetTabWidthException扩展RuntimeException{
}
public SevenTabLayout(上下文){
超级(上下文);
}
public SeventBlayout(上下文、属性集属性){
超级(上下文,attrs);
初始化etabwidths();
}
public SevenTabLayout(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
初始化etabwidths();
}
公共无效初始值etabwidths(){
int tabwidth=140;//屏幕大小除以7
setPrivateField(“mRequestedTabMinWidth”,tabwidth);
setPrivateField(“mRequestedTabMaxWidth”,tabwidth);
}
私有void setPrivateField(字符串tabMinWidthFieldName,int值){
试一试{
字段f=TabLayout.class.getDeclaredField(tabMinWidthFieldName);
f、 setAccessible(true);
f、 setInt(这个值);
}捕获(无此字段例外){
抛出新的SetTabWidthException();
}捕获(非法访问异常e2){
抛出新的SetTabWidthException();
}
}
}
现在,您可以轻松地为initializeTabWidths()添加单元测试
方法,以便您可以在升级设计支持库后检测何时停止工作。如果将表格布局封装在水平可滚动布局中,并在代码中检查是否有七个,并且仅从七个开始激活可滚动布局,该方法可能不起作用,在七个项目之后,我可能还有20个项目。我真正想要的是,我希望scrollView选项卡模式适合7个项目,根据现在的情况,它将项目作为设备宽度file@NJNileshJ更新,请看一看。如果您将表格布局封装在一个水平可滚动布局中,并在代码中检查您是否有七个,并且仅从七个开始激活可滚动布局,该怎么办?这种方法可能不起作用,因为在七个项目之后,我可能还有20个项目。我真正想要的是,我希望scrollView选项卡模式适合7个项目,根据现在的情况,它将项目作为设备宽度file@NJNileshJ更新了,请看一看。哦,伙计。。。非常感谢。。。成功了