android-fragments RecyclerView和Toolbar,无法将底部项目滚动到视图中

kyxcudwk  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(167)

**编辑:**完整代码请参见Using the Master/Detail template in ViewPager Fragments (download link)

我有一个工具栏和一个recyclerView。当布局第一次膨胀时,recyclerView的最后一个项目超出了屏幕的可滚动区域,因此不可见。旋转后,该项目出现。很明显,工具栏将recyclerView推到了屏幕边界之外。如果我在recyclerView的底部添加填充,填充的高度与工具栏的高度相同,这个问题就解决了,但只是最初的布局膨胀问题。旋转后,我在屏幕底部留下了一个缺口。我使用的是sdk 23。
一个可能的解决方案是在第一次膨胀布局后以编程方式删除填充用途:

onCreateView(){ if (onSaveInstanceState != null) removePadding();}

然而,我宁愿不必做一个狡猾的变通办法。
我的应用基本上与Android Studio中提供的Master/Detail-flow模板完全相同,只不过我使用了片段和单个Activity。模板中没有此类问题。
有什么想法吗?
fragment_item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        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"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

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

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <include layout="@layout/item_list" />
    </FrameLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

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

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/item_list"
    android:name="com.idragonit.scrolltabs.ItemListFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    app:layoutManager="LinearLayoutManager"
    tools:context="com.idragonit.scrolltabs.ItemListActivity"
    tools:listitem="@layout/item_list_content" />

item_list_content.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/text_margin"
        android:textAppearance="?attr/textAppearanceListItem" />

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/text_margin"
        android:textAppearance="?attr/textAppearanceListItem" />
</LinearLayout>

www.example.com的代码片段ItemListFragment.java

Toolbar toolbar = (Toolbar) root.findViewById(R.id.toolbar);
toolbar.setTitle("List");
bpsygsoo

bpsygsoo1#

我又道:

android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"

到item_list.xml。此问题仍然存在。第一次扩大布局时,它会按预期显示底部元素。旋转到横向并返回到纵向后,它会在屏幕底部留下actionBar大小的边距。
Android Studio中提供的Master/Detail-flow模板中不会出现此问题,item_list. xml、item_list_twopane. xml和activity_item_list的代码与我的项目中item_list. xml、land/item_list. xml和fragment_item_list. xml中使用的代码完全相同。然而,如所附图片所示,AppBar预览显示的是Android模板中的灵活空间,而不是我的代码。
编辑:当我点击模板中“?attr/actionBarSize”的引用时,它会导航到android SDK的values.xml中以<declare-styleable name="AppCompatTheme">开头的另一行。我的应用中的同一行代码引用了以<declare-styleable name="Theme">开头的另一行。
截图:

iqih9akk

iqih9akk2#

<?xml version="1.0" encoding="utf-8"?>
<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:background="@color/white"
   android:orientation="vertical">

   <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.AppBarLayout>

   <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/item_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:scrollbars="vertical" />

   </LinearLayout>

   <android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="@dimen/activity_vertical_margin"
    android:layout_marginRight="@dimen/activity_horizontal_margin"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/colorPrimary" />

</android.support.design.widget.CoordinatorLayout>
vq8itlhq

vq8itlhq3#

您必须添加
android:layout_paddingBottom="?attr/actionBarSize
而不是
android:layout_marginBottom="?attr/actionBarSize
这对我有用

相关问题