Android - umano SlidingUpPanelLayout - 内容适合SystemWindows

时间:2017-04-05 18:25:06

标签: android slidingpanelayout

我使用的是以下库: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>

第二个解决方案是我有一个空容器,它将拦截所有触摸事件,我无法将它们传递给主要内容。

有没有人有解决方法?感谢

2 个答案:

答案 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>

这对我很有用。 :)