我有一个包含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会正确显示并显示每个标签的整个标题文字,如下所示:
但是,有时它只会显示标题中的前两个字符,如下所示:
在活动创作期间,我打电话给:
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截断标题的原因是什么?是否以某种方式创建了超高屏幕截图?