0

我正在使用以下库: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,但我无法获得所需的行为。滑动布局永远不适合屏幕。

我尝试的另一种可行的方法是用一个空的 ViewGroup 替换 main_content ,该 ViewGroup 必须匹配_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>

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

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

4

2 回答 2

0

好的,所以我找到了一种方法。

我删除了该库并使用了自定义的 BottomSheetBehavior,例如https://github.com/fedorenkoalex/bottomsheetrecycler/。点击链接,看看它是如何实现的。感谢fedorenkoalex的解决方案。

结果几乎相同,唯一的事情是当您滚动嵌套的回收器视图(或其他滚动视图)时,它会很好地处理滚动,除非您不能再向上滚动:如果 RecyclerView 已经在顶部并且您尝试滚动顶部,然后它会将底部的纸张向下推。这最终还不错,因为这是一种直观的行为。

于 2017-04-06T17:49:12.123 回答
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>

这对我很有用。:)

于 2017-04-06T18:04:40.387 回答