为平板电脑设置标签布局选项卡模式的最佳方法是什么?

我正在使用Androiddevise支持库中的TabLayout。 我怎样才能使用MODE_SCROLLABLE和GRAVITY_FILL,使它在所有设备和方向上看起来一样?

目前如果我使用MODE_SCROLLABLE,在7“平板电脑上看起来不错,但是在10”平板电脑上,这些标签是左alignment的。 我希望能够使用GRAVITY_FILL所有大小。

这是我的tablayout:

<android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="72dp" /> 

我在代码中设置模式

  tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); 

Solutions Collecting From Web of "为平板电脑设置标签布局选项卡模式的最佳方法是什么?"

根据TabLayout.GRAVITY_FILL文档 :

重力用于尽可能地填充TabLayout 。 此选项仅在与MODE_FIXED一起使用时才生效。

因此,通过将您的模式设置为MODE_SCROLLABLE,选项卡始终与起始边缘alignment – MODE_SCROLLABLE的平板电脑和手机之间的唯一区别是选项卡材质devise规范所设置的选项卡的最小宽度。

请注意,如果要将视图始终设置为可滚动,则可以通过XML指定重力和标签模式:

 <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="72dp" app:tabMode="scrollable" /> 
 //to get phones width in dp int w= (int)((Resources.getSystem().getDisplayMetrics().widthPixels)/Resources.getSystem().getDisplayMetrics().density); //To check screen width is greater than approx total no of tabswidth //I have calculated tabswidth by setting mode scrollable in layout and trying in defferent phones i got space left in 384dp width phone and no space in 360dp width phone so i took 370 if(w>370){ tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); tabLayout.setTabMode(TabLayout.MODE_FIXED); } else tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); 

我使用了一个非常类似Jayesh的解决scheme,但是我的选项卡使用最小宽度,并根据这个计算使用哪种模式。 这样你只需要知道你的标签的最小可接受尺寸是多less。 如果他们都有空余的空间,它会伸出来填满所有的空间,如果太多,它会使他们的最小宽度,切换到可滚动。

  DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); float dpWidth = displayMetrics.widthPixels / displayMetrics.density; //For some reason, setting minWidth in xml and then accessing it here doesn't work, returns 0 int minWidth = 80; tabLayout.setMinimumWidth(minWidth); //If there are less tabs than needed to necessitate scrolling, set to fixed/fill if(tabLayout.getTabCount() < dpWidth/minWidth){ tabLayout.setTabMode(TabLayout.MODE_FIXED); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); }else{ //Otherwise, set to scrollable tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); } 

在xml中,Tablayout只是具有这些属性

 <android.support.design.widget.TabLayout android:id="@+id/sliding_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMaxWidth="0dp" /> 

我遇到了同样的问题。

在我看来,解决这个问题并不容易。 在FIX_MODE中,tablayout中的所有选项卡具有基于最大项目的相同宽度。

而在SCROLL_MODE中,所有的选项卡都有自己的宽度。

所以解决scheme变得有点复杂。

我想过两个解决scheme,第一个解决scheme:给每个标签项目的文本一些空格,使所有项目具有相同的宽度,并在同一时间填写屏幕。

另一种解决scheme是在tablayout中使用customview,就像在这篇文章中所说的那样,那么你可以设置项目宽度mannualy。