SlidingTabLayout以适应屏幕

我正在使用Google的SlidingTabLayout。 由于我只有3个选项卡可以显示,所以我在最后一个选项卡后看到了空白区域。 请在下面截图。 在这里输入图像说明

有人可以解释我如何适应整个屏幕的标签。 谢谢你的时间。

SlidingTabLayout.java ,find

 protected TextView createDefaultTabView(Context context) 

并将这些行添加到该方法:

 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); textView.setWidth(size.x / 3); 

这为我修好了。 基本上,你得到你的屏幕的宽度和3(制表符的数量),并将其设置为构成您的选项卡的TextField的宽度。

更新:

在当前的源代码中,google添加了一个setDistributeEvenly(Boolean); 方法,所以可以使用slidingTabs.setDistributeEvenly(true); 代替。 当使用较旧的源代码时,可以使用上面的解决scheme,或者更新到最新的源代码(推荐使用后者)。

在setViewPager()之前使用这个:

 slidingTabs.setDistributeEvenly(true); 

如果你有这个错误Cannot resolve method 'setDistributeEvenly(boolean)' ,你应该更新你的SlidingTabLayout.java和SlidingTabStrip.java从谷歌I / O源代码:

SlidingTabLayout.java

SlidingTabStrip.java

更改SlidingTabLayout.java文件可能会有所帮助。 但是,解决scheme可能不是很通用。 在SlidingTabLayout.java文件中,search该方法

 protected TextView createDefaultTabView(Context context) 

在TextView的“set”方法下面,input下面的代码。

 textView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f)); 

每个标签条只是一个自定义的LinearLayout。

SubliemeSiem的回答是正确的。 更灵活和更短的答案是为构成选项卡的每个TextView添加1的权重。

在SlidingTabLayout.java中 ,find

 protected TextView createDefaultTabView(Context context) 

在撰写本文时是171行。 将此行添加到该函数。

 textView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

TableLayout.LayoutParams有三个参数,最后一个是重量。 由于横向布局中的所有视图都具有相同的权重,因此它们的大小相同。 包装内容应该允许优雅的行为,因为选项卡的数量增加和大小溢出屏幕的宽度,但我没有testing..

您可以创build一个自定义选项卡布局,并将其分配给您的SlidingTabLayout来充气。

custom_tab.xml:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/customTab"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/customText"/> </FrameLayout> 

在你的代码中:

  viewPager = (ViewPager) rootView.findViewById(R.id.viewPager); viewPager.setAdapter(new SampleAdapter(getChildFragmentManager())); SlidingTabLayout tabLayout = (SlidingTabLayout)rootView.findViewById(R.id.slidingTab); tabLayout.setCustomTabView(R.layout.custom_tab,R.id.customText); tabLayout.setViewPager(viewPager); 

通过保持宽度为0 dp和重量为1(数字是任意的),布局应该照顾给你所有的标签平等的屏幕空间。 这也适用于任何数量的选项卡。 你不需要修改你的SlidingTabLayout.java。

Google已经发布了devise支持库 。 你现在可以使用TabLayout 。 要使标签适合屏幕,您可以调用setTabMode(TabLayout.MODE_FIXED);

更dynamic的方法是

编辑SlidingTabLayout.java

findprivate void populateTabStrip()方法并进行replace

 mTabStrip.addView(tabView); 

  // get dimension of current layout DisplayMetrics display = this.getResources().getDisplayMetrics(); int width = display.widthPixels; //your tab names here String[] tabTitles = {"tab1", "tab2", "tab3"} // compare max width and number of tabs's length //will not fit to the maxwidth it will distribute the tabs evenly if(width%(width/tabTitles.length) == 0){ mTabStrip.addView(tabView, new LinearLayout.LayoutParams(width/tabTitles.length, ViewGroup.LayoutParams.WRAP_CONTENT)); } else { mTabStrip.addView(tabView); } 

SlidingTabLayout.java下面的方法中,就在return语句之前:

 protected TextView createDefaultTabView(Context context) 

我将这些行添加到该方法:

 final PagerAdapter adapter = mViewPager.getAdapter(); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f / adapter.getCount()); textView.setLayoutParams(param); 

这是非常接近答案标记为问题的解决scheme,但我不必使用窗口pipe理器。

在每个textview的xml布局中试试这个android:layout_weight="1"