我正在使用Google的SlidingTabLayout。由于我只有3个标签要显示,我看到最后一个标签后的空格。 请截图如下。
有人可以解释我如何使标签适合整个屏幕。谢谢你的时间。
答案 0 :(得分:97)
在setViewPager()之前使用它:
slidingTabs.setDistributeEvenly(true);
如果您收到此错误Cannot resolve method 'setDistributeEvenly(boolean)'
,则应从Google I / O源代码更新SlidingTabLayout.java和SlidingTabStrip.java:
答案 1 :(得分:44)
在SlidingTabLayout.java
中,找到
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);
。使用旧的源代码时,请使用我上面的解决方案,或更新到最新的源代码(建议使用后者)。
答案 2 :(得分:10)
更改SlidingTabLayout.java文件可能会有所帮助。但是,该解决方案似乎不太通用。 在SlidingTabLayout.java文件中,搜索方法
protected TextView createDefaultTabView(Context context)
在TextView&#39;下面设置&#39;方法,输入以下代码。
textView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
每个标签条仅仅是一个自定义的LinearLayout。
答案 3 :(得分:8)
SubliemeSiem的回答是正确的。更灵活,更简洁的答案是为组成选项卡的每个TextView添加1的权重。
protected TextView createDefaultTabView(Context context)
在撰写本文时,这是第171行。将此行添加到该函数中。
textView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
TableLayout.LayoutParams有三个参数,最后一个是权重。由于水平布局中的所有视图都具有相同的权重,因此它们的大小相同。随着标签数量的增加以及屏幕宽度超出屏幕宽度,包装内容应该允许优雅的行为,但我还没有测试过..
答案 4 :(得分:5)
您可以创建自定义标签布局并将其指定给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。
答案 5 :(得分:4)
Google发布了Design Support Library。您现在可以使用TabLayout
。要使标签适合屏幕,您可以拨打setTabMode(TabLayout.MODE_FIXED);
答案 6 :(得分:0)
更动态的方法是
修改SlidingTabLayout.java
找到private void populateTabStrip()
方法并替换
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);
}
答案 7 :(得分:0)
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);
非常接近标记为问题解决方案的答案,但我不必使用窗口管理器。
答案 8 :(得分:0)
在每个文本视图的xml布局中尝试此METADATA
。