我使用的是以下库:https://github.com/umano/AndroidSlidingUpPanel。
我想在滚动时显示状态栏下面的内容,我无法使main_content(SlidingUpPanelLayout的第一个容器)适合屏幕。我想在滚动时显示状态栏下方的内容。
这是我的第一个xml配置:
<android.support.v4.widget.DrawerLayout
...
android:fitsSystemWindows="true">
<com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout
...
android:fitsSystemWindows="true">
<!-- This is where I don't get what I want,
This container has always a padding top equals to the
status bar size, so it will always affect the direct
childs => main_content (my fragments container) -->
<com.sothree.slidinguppanel.SlidingUpPanelLayout
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" // seems to not be supported
android:gravity="bottom"
...>
<!-- Main content - fragments placeholder -->
<com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" // if the parent doesn't it will not either.
tools:background="@color/colorAccent" />
<!-- Panel -->
<FrameLayout
android:id="@+id/..."
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:fitsSystemWindows="false" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<com.hnhh.app3.widgets.BannerAdWrapper.../>
</FrameLayout>
</com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout>
<include layout="@layout/navigation" />
</android.support.v4.widget.DrawerLayout>
我尝试使用几个父级用于sliding_layout但我无法设法获得所需的行为。 sliding_layout永远不适合屏幕。
我尝试过的另一种方法,就是将main_content替换为一个空的ViewGroup,它必须是match_paren(库想要那样),而main_content不在SlidingUpPanelLayout之内,而是在之前。
<android.support.v4.widget.DrawerLayout >
<com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout>
<!-- NEW Main content - fragments placeholder -->
<com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout />
<com.sothree.slidinguppanel.SlidingUpPanelLayout>
<!-- Replaced old main_content with empty -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- Panel -->
<FrameLayout />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
<FrameLayout>
<com.hnhh.app3.widgets.BannerAdWrapper/>
</FrameLayout>
</com.hnhh.app3.fragments.model.FitsSystemWindowsFrameLayout>
<include layout="@layout/navigation" />
</android.support.v4.widget.DrawerLayout>
第二个解决方案是我有一个空容器,它将拦截所有触摸事件,我无法将它们传递给主要内容。
有没有人有解决方法?感谢
答案 0 :(得分:0)
好的,所以我找到了一条路。
我删除了库并使用了https://github.com/fedorenkoalex/bottomsheetrecycler/中的自定义BottomSheetBehavior。按照链接查看它是如何实现的。感谢 fedorenkoalex 提供解决方案。
结果几乎相同,唯一的事情是当您滚动嵌套的回收器视图(或其他滚动视图)时,它将处理好滚动,除非您不能再向上滚动:如果RecyclerView已经在顶部而您尝试向上滚动,然后它将向下推动底部纸张。这最终并不坏,因为它是一种直观的行为。
答案 1 :(得分:0)
您可以使用此xml布局:
<!-- MAIN CONTENT -->
<LinearLayout 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:focusableInTouchMode="true"
android:orientation="vertical"
tools:context="com.amitupadhyay.clickin.in.amitupadhyay.clickin.ui.MainActivity">
<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.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tabLayout"
app:tabMode="scrollable"
app:tabGravity="fill"
app:tabTextAppearance="@style/MY_TAB_STYLE">
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/viewPager">
</android.support.v4.view.ViewPager>
<include layout="@layout/content_main" />
</LinearLayout>
<!-- SLIDING LAYOUT -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clickable="true"
android:focusable="false"
android:id="@+id/dragView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="68dp"
android:background="@color/colorPrimary"
android:id="@+id/bottomPannerLinearLayout"
android:orientation="horizontal">
<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="14sp"
android:textColor="@android:color/white"
android:gravity="center_vertical"
android:paddingLeft="10dp"/>
<Button
android:id="@+id/follow"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="14sp"
android:gravity="center_vertical|right"
android:paddingRight="10dp"
android:paddingLeft="10dp"/>
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/side_nav_bar"
android:orientation="vertical">
<TextView
android:id="@+id/anyid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<Button
android:layout_width="wrap_content"
android:layout_height="55dp"
android:id="@+id/anyotherid"
style="@style/AppTheme.Button"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:textStyle="bold"
android:padding="10dp"
android:textSize="20sp"
android:text="Submit"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
这对我很有用。 :)