【问题标题】:RecyclerView and Toolbar, can't scroll bottom item into viewRecyclerView 和工具栏,无法将底部项目滚动到视图中
【发布时间】:2016-06-16 05:27:06
【问题描述】:

编辑:完整代码见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>

ItemListFragment.java的sn-p

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

【问题讨论】:

标签: android android-layout android-fragments android-recyclerview android-toolbar


【解决方案1】:

我补充说:

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 中的另一行,该行以 &lt;declare-styleable name="AppCompatTheme"&gt; 开头。我的应用程序中的同一行代码引用了以&lt;declare-styleable name="Theme"&gt; 开头的不同行。

截图:

【讨论】:

    【解决方案2】:
    <?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>
    

    【讨论】:

    • 你能解释一下变化吗?
    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多