我正在使用Android Design支持库中的TabLayout。如何将MODE_SCROLLABLE与GRAVITY_FILL一起使用,以使其在所有设备和方向上看起来都相同?
目前,如果我使用MODE_SCROLLABLE,它在7英寸平板电脑上看起来不错,但在10英寸平板电脑上,标签会向左对齐。我希望能够为所有尺寸使用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);
答案 0 :(得分:10)
根据TabLayout.GRAVITY_FILL documentation:
重力用于尽可能地填充
TabLayout
。此选项仅在与MODE_FIXED一起使用时生效。
因此,通过将模式设置为MODE_SCROLLABLE,标签始终与起始边对齐 - 平板电脑和手机之间唯一的区别是MODE_SCROLLABLE是标签的最小宽度,由tabs material design spec设置。
请注意,如果要将视图设置为始终可滚动,则可以通过XML指定重力和制表模式:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="72dp"
app:tabMode="scrollable"
/>
答案 1 :(得分:4)
//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);
答案 2 :(得分:3)
我使用了与Jayesh非常相似的解决方案,但是我使用了标签的最小宽度,并根据它计算使用哪种模式。这样,您只需知道选项卡的最小可接受大小。如果它们都适合空间,它会伸展它们以填满所有空间,如果有太多空间,它将使它们成为最小宽度并切换到可滚动。
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"
/>
答案 3 :(得分:0)
我遇到了同样的问题。
在我看来,解决问题没有简单的解决方案。
在FIX_MODE中,tablayout中的所有选项卡都具有基于最大项目的相同宽度。
在SCROLL_MODE中,所有标签都有自己的宽度。
所以解决方案有点复杂。
我已经想到了两个解决方案,第一个解决方案:给每个标签项目的文本留出一些空白,使所有项目具有相同的宽度,同时填满屏幕。
另一个解决方案是在tablayout中使用customview,就像在article中所说的那样,然后你可以设置项目宽度mannualy。