TabLayout 标头在片段中隐藏列表视图上的第一项



我的Android技能有点生疏,我希望有人可以帮助我。我有一个带有ViewPager TabLayout,可以在ListView中滑动具有不同数据的相同Fragment。一切正常,但我遇到了一个问题。制表符标题文本隐藏了Fragment的一部分,导致ListView的第一个元素被隐藏在后面。我真的试图找到解决这个问题的方法,但我做不到,我相信它一定是简单但没有解决方案的事情。如果您需要更多信息,请询问。我有这个活动布局:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:background="?attr/colorPrimary"
        android:elevation="6dp"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    />
</android.support.design.widget.CoordinatorLayout>

这是活动代码:

public class ParadasActivity extends AppCompatActivity 
           implements LoaderManager.LoaderCallbacks<Cursor>{
...
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    while (cursor.moveToNext()) {
        Tab tab =tabLayout.newTab();
        tabLayout.addTab(tab);
    }

片段代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_paradas, container, false);
    paradasAdapter = new ParadasAdapter(getActivity(), null, 0);
    mListView = (ListView) view.findViewById(R.id.listview_paradas);
    mListView.setAdapter(paradasAdapter);
    return view;
}

片段布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:id="@+id/fragment_paradas"
         tools:context="com.pikohsoft.android.tussantander.ParadasActivityFragment"
         tools:showIn="@layout/activity_paradas">
<ListView android:id="@+id/listview_paradas"
          android:layout_height="match_parent"
          android:layout_width="match_parent"
    />

以及寻呼机适配器的代码:

public class SublineasPagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public SublineasPagerAdapter(FragmentManager fm, int NumOfTabs, Bundle arguments) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
    ParadasActivityFragment tab1 = new ParadasActivityFragment();
    return tab1;
}
@Override
public int getCount() {
    return mNumOfTabs;
}

当您使用 CoordinatorLayout 时,它是从 ViewGroup 扩展的,因此当您将ViewPager(或其他类型的Layout)按 Z 顺序排列时,它们会重叠(并且您会看到它们彼此重叠),因此通过使用

app:layout_behavior="@string/appbar_scrolling_view_behavior"

你告诉 CoordinatorLayout 嘿,它有点不同!!它会查看您的 AppBarLayout 并将此布局放在 appbar 下方。

最新更新