SlidingTabLayout适合屏幕

Raj*_*aju 44 android

我正在使用谷歌的SlidingTabLayout.由于我只有3个标签要显示,我看到最后一个标签后的空格.请截图如下. 在此输入图像描述

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

iFo*_*sts 97

在setViewPager()之前使用它:

slidingTabs.setDistributeEvenly(true);
Run Code Online (Sandbox Code Playgroud)

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

SlidingTabLayout.java

SlidingTabStrip.java

  • 并在setViewPager之前调用它 (14认同)
  • 这是正确答案,您应该从github而不是谷歌开发者页面下载代码. (3认同)

Sub*_*iem 44

SlidingTabLayout.java,找到

protected TextView createDefaultTabView(Context context)
Run Code Online (Sandbox Code Playgroud)

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

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

这为我解决了这个问题.基本上,您将获得屏幕的宽度并除以3(标签的数量),并将其设置为构成标签的宽度TextField.

更新:

在当前的源代码中,谷歌添加了一种setDistributeEvenly(Boolean);方法,因此您可以使用slidingTabs.setDistributeEvenly(true);.使用旧的源代码时,可以使用我上面的解决方案,也可以更新到最新的源代码(建议使用后者).

  • 此解决方案有效,但您最好使用sliding_tabs.setDistributeEvenly(true). (6认同)
  • 重要提示:在setViewPager()之前使用它,否则它将无法工作! (2认同)

Ach*_*nha 10

更改SlidingTabLayout.java文件可能会有所帮助.但是,该解决方案似乎不太通用.在SlidingTabLayout.java文件中,搜索方法

protected TextView createDefaultTabView(Context context)
Run Code Online (Sandbox Code Playgroud)

在TextView"set"方法下,输入以下代码.

textView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
Run Code Online (Sandbox Code Playgroud)

每个标签条仅仅是一个自定义的LinearLayout.


Der*_*rek 8

SubliemeSiem的答案是正确的.更灵活,更简洁的答案是为组成选项卡的每个TextView添加1的权重.

SlidingTabLayout.java中,找到

protected TextView createDefaultTabView(Context context)
Run Code Online (Sandbox Code Playgroud)

在撰写本文时,它是第171行.将此行添加到该函数中.

textView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
Run Code Online (Sandbox Code Playgroud)

TableLayout.LayoutParams有三个参数,最后一个是权重.由于水平布局中的所有视图都具有相同的权重,因此它们的大小相同.随着标签数量的增加和大小溢出屏幕的宽度,包装内容应该允许优雅的行为,但我没有测试过..


ami*_*v13 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>
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

    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);
Run Code Online (Sandbox Code Playgroud)

通过将宽度保持为0 dp并将权重保持为1(数字是任意的),布局应该注意为所有选项卡提供相等的屏幕空间.这也适用于任意数量的选项卡.您不需要修改SlidingTabLayout.java.