NestedScrollView剪切/覆盖嵌套片段的底部

时间:2016-11-14 14:09:12

标签: android android-fragments android-coordinatorlayout android-nestedscrollview

我对NestedScrollView有疑问,因为它会削弱视角。

我有FragmentA架构:

<RelativeLayout>
<android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.AppBarLayout>
        <android.support.design.widget.CollapsingToolbarLayout>
            <ImageView/>
            <android.support.v7.widget.Toolbar/>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.widget.NestedScrollView>
        <LinearLayout>
            <FrameLayout> 
                <!-- fragment added dynamically-->
            </FrameLayout>
            <FrameLayout>
                <!-- fragment added dynamically-->
            </FrameLayout>
            <FrameLayout>
                <!-- fragment added dynamically-->
            </FrameLayout>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
    <android.support.design.widget.FloatingActionButton/>
</android.support.design.widget.CoordinatorLayout>

我正在为每个FrameLayout添加dinamically片段。

第一次运行应用时,我做了SS的样子:Screen at first time 我为每个布局添加了填充以查看发生的情况。 greenCoordinatorLayoutredNestedScrollVieworange LinearLayout位于NestedScrollViewFragmentA

现在我用FragmentB替换FragmentA并再次回到FragmentA,我有类似这样的内容:wrong dispaly

有人知道我做错了什么吗?

这是<RelativeLayout 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:orientation="vertical"> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorP" android:padding="5dp" android:layout_above="@+id/przyciski"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="160dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginBottom="25dp" app:expandedTitleMarginEnd="0dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/header" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" app:layout_collapseMode="parallax" android:contentDescription="descp" /> <android.support.v7.widget.Toolbar android:id="@+id/anim_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/scrollableview" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorRedCalendar" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:padding="5dp"> <LinearLayout android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:orientation="vertical" android:padding="5dp"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frameForInfo" android:minHeight="100dp" android:focusableInTouchMode="true"> </FrameLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frameForCalendar" android:minHeight="100dp" android:focusableInTouchMode="true"> </FrameLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frameForGraph" android:minHeight="100dp" android:focusableInTouchMode="true"> </FrameLayout> </LinearLayout> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/fab_margin" android:clickable="true" app:layout_anchor="@+id/appbar" app:layout_anchorGravity="bottom|right|end" app:backgroundTint="@color/colorAccent" android:id="@+id/floatingButtonLog" /> </android.support.design.widget.CoordinatorLayout> </RelativeLayout> 的整个布局:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.jjoe64:graphview:4.2.1'
}

编辑: 我编译:

Fragments

我将FrameLayout添加到infoFragment = new InfoFragment(); infoFragment.setLogs(mapLogIn, mapLogOut, monthToDispaly, yearToDispaly); infoFragment.setPracownik(mPracownik); if (getChildFragmentManager().findFragmentByTag("INFO") == null) { getChildFragmentManager() .beginTransaction() .add(R.id.frameForInfo, infoFragment, "INFO") .commit(); }else { getChildFragmentManager() .beginTransaction() .replace(R.id.frameForInfo, infoFragment, "INFO") .commit(); } 中:

FragmentA

我如何用FragmentB替换((AppCompatActivity)getActivity()).getSupportFragmentManager() .beginTransaction() .replace(R.id.frameForFragment, edit) .addToBackStack(null) .commit();

FragmentB

我如何从FragmentA回到getFragmentManager().beginTransaction().remove(AddingPerson.this).commit(); if (getFragmentManager().getBackStackEntryCount()>0){ getFragmentManager().popBackStack(); }

FragmentA

看起来NestedScrollView在底部是cuted,因为(如果你看ss)底部没有填充框架。

我注意到当我回到NestedScrollView时(当显示错误的显示时),我会在NestedScrollView android:layout_gravity="fill_vertical" android:layout_marginBottom="?attr/actionBarSize" 底部替换片段。

Here is YT video.

更新

我找到了临时回答here。我补充说:

{{1}}

但有人写道,这个错误在v22.2.1中得到修复,但似乎并非如此。有人对此有所了解吗?

3 个答案:

答案 0 :(得分:1)

尝试使用:

android:layout_marginBottom="?attr/actionBarSize"
在NestedScrollView

答案 1 :(得分:0)

尝试在nestedscrollview

中添加此内容
android:fillViewport="true"

答案 2 :(得分:0)

接受的答案在旋转屏幕或显示软键盘时添加了余量。我修复了一个OnGlobalLayoutListener()到主视图,并从侦听器内部调用requestLayout()到这样的视图。