TabLayout标签随机显示每个标题中的2个字符

时间:2017-02-27 12:15:05

标签: android android-tablayout

我有一个包含TabLayout的活动,其tabMode设置为'可滚动':

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                                 xmlns:app="http://schemas.android.com/apk/res-auto"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar" app:layout_scrollFlags="scroll|enterAlways"
            android:layout_width="match_parent"
            android:layout_height="?android:actionBarSize"
            android:background="@color/primary"
            android:titleTextColor="@color/white">

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="?android:actionBarSize"
                android:layout_below="@+id/toolbar" android:layout_gravity="bottom" app:tabMode="scrollable"
                app:tabGravity="fill" />
        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout>

大多数情况下,TabLayout会正确显示并显示每个标签的整个标题文字,如下所示:

TabLayout without any issues

但是,有时它只会显示标题中的前两个字符,如下所示:

TabLayout with issue showing

在活动创作期间,我打电话给:

setSupportActionBar(getToolbar());
getSupportActionBar().setDisplayHomeAsUpEnabled(false);

在我的活动中呈现的片段中,我正在按如下方式初始化TabLayout:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_pager, null);
        viewPager = (ViewPager) view.findViewById(R.id.view_pager);

        setupViewPager(viewPager);
        TabLayout tabs = (TabLayout)getActivity().findViewById(R.id.tabs);
        tabs.removeAllTabs();
        tabs.setVisibility(View.VISIBLE);
        tabs.setupWithViewPager(viewPager);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));
        return view;
    }

private void setupViewPager(ViewPager viewPager) {
    adapter = new PeopleFragmentAdapter(getChildFragmentManager());
    viewPager.setAdapter(adapter);
}

FragmentAdapter代码如下所示:

public class PeopleFragmentAdapter extends FragmentPagerAdapter {

    public PeopleFragmentAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return PeopleFragment.newInstance(position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Nearby";
            case 1:
                return "Online";
            default:
                return "Following";
        }
    }
}

PeopleFragment托管在第一个片段中,从XML文件创建了一个选项菜单:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments().getInt(ARG_SECTION_NUMBER, 0) < 2)
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_people, menu);
}

TabLayout位于活动布局中而不是第一个片段的原因是因为它正被其他可通过BottomBar访问的片段重用。

奇怪的是,也许并不相关,当我在展示问题时拍摄设备的屏幕截图时,高度远远超过平常(正如您在上面的屏幕截图中看到的那样)。

可能导致TabLayout截断标题的原因是什么?是否以某种方式创建了超高屏幕截图?

0 个答案:

没有答案