我对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
我为每个布局添加了填充以查看发生的情况。
green
是CoordinatorLayout
,
red
是NestedScrollView
,
orange
LinearLayout
位于NestedScrollView
内FragmentA
。
现在我用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。我补充说:
{{1}}
但有人写道,这个错误在v22.2.1中得到修复,但似乎并非如此。有人对此有所了解吗?
答案 0 :(得分:1)
尝试使用:
android:layout_marginBottom="?attr/actionBarSize"
答案 1 :(得分:0)
尝试在nestedscrollview
中添加此内容android:fillViewport="true"
答案 2 :(得分:0)
接受的答案在旋转屏幕或显示软键盘时添加了余量。我修复了一个OnGlobalLayoutListener()到主视图,并从侦听器内部调用requestLayout()到这样的视图。