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"
。