SlidingTabLayout适合屏幕

时间:2014-11-07 14:50:32

标签: android

我正在使用Google的SlidingTabLayout。由于我只有3个标签要显示,我看到最后一个标签后的空格。 请截图如下。 enter image description here

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

9 个答案:

答案 0 :(得分:97)

在setViewPager()之前使用它:

slidingTabs.setDistributeEvenly(true);

如果您收到此错误Cannot resolve method 'setDistributeEvenly(boolean)',则应从Google I / O源代码更新SlidingTabLayout.java和SlidingTabStrip.java:

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的权重。

SlidingTabLayout.java中,找到

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