如何使BottomSheetDialogFragment出现在BottomNavigationView的顶部以及如何使其出现在BottomNavigationView的下方

时间:2019-06-11 00:45:10

标签: android bottomnavigationview bottom-sheet

BottomSheetFragment Collapsed in Top of BottomNavigationView

我正试图使BottomSheetDialogFragment出现在BottomNavigationView的顶部和BottomNavigationView的下方,即具有较低的高度。 BottomSheetDialogFragment将具有一个类似YouTube的视频播放器,并带有RecyclerView并展开和折叠底部表格。 我已经研究了一些建议,但没有解决。包括Stackoverflow。 按照下面的代码,我尝试了Show()方法的两个变体-但没有一个起作用。 我可以执行“展开”,“合拢”等动作,不用担心。问题是将BottomSheet放在Activity的BottomNavigationView后面和RecyclerView之上。

代码活动

公共类myController扩展了CommonActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //inflate the layout of the activity
    setContentView(R.layout.controller_layout);
    //other activity codes
    //progressBar = findViewById(R.id.progressBar);
    //contains initialization codes for views and recyclerview
    //initViews();
}

OPTION 01: It's the CALL that everyone is pointing to BottomSheetDilogFragment, except BottomSheet is over BottomNavigationView
INITIALIZED when clicking on a item (thumbnail) of a RecyclerView in the layout of the activity/fragment
  public void initBottomSheet(Bundle b){
    VideoViewBottomSheet fragment = new VideoViewBottomSheet();
    fragment.setArguments( b );
    fragment.show( getSupportFragmentManager(), VideoViewBottomSheet.FRAGMENT_KEY );}

OPTION 02: I tried this option for BottomSheetDilogFragment, in it the BottomSheet is 
DOWN of the BottomNavigationView, BUT behave like a NORMAL FRAGMENT and not as BottomSheetDilogFragment, DO NOT EXPAND, DO NOT COLLAPSE, NOTHING.
  public void initBottomSheet(Bundle b){
    VideoViewBottomSheet fragment = new VideoViewBottomSheet();
    fragment.setArguments( b );
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.bottom_sheet_loyout, fragment);
    ft.commit();
}

}

CODE BottomSheetFragment

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();

    if (dialog != null) {
        View view = getView();
        final View parent = (View) view.getParent();
        final View bottomSheet = dialog.findViewById(R.id.rv_bottom_sheet);
        final View videoView = bottomSheet.findViewById(R.id.videoView);
        final View bottom_nav_view = getActivity().findViewById(R.id.bottom_nav_view);
        final int screenHeight = ViewGroup.LayoutParams.MATCH_PARENT;
        final View relativeLayout = getActivity().getWindow().getDecorView().getRootView().findViewById(R.id.relativelayout);
        final View coodinatorLayout = getActivity().getWindow().getDecorView().getRootView().findViewById(R.id.coordinatorlayout);

        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) (parent).getLayoutParams();
        CoordinatorLayout.Behavior behavior = params.getBehavior();

        parent.setFitsSystemWindows(false);
        bottomSheet.getLayoutParams().height = screenHeight;
        params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;

        final BottomSheetBehavior bottomSheetBehavior = (BottomSheetBehavior) behavior;
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);

        if (bottomSheetBehavior instanceof BottomSheetBehavior) {
            offsetY = 0;
            ((BottomSheetBehavior) bottomSheetBehavior).setBottomSheetCallback(
            new BottomSheetBehavior.BottomSheetCallback() {

                @Override
                public void onSlide(@NonNull View bottomSheet, float slideOffset) {
                    if(slideOffset>0.2 ){
                        bottomSheetBehavior.setHideable(false);
                        bottomSheetBehavior.setPeekHeight(bottom_nav_view.getHeight()+56 );
                        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                        parent.setPadding(0,0,0,bottom_nav_view.getHeight()+56);
                        parent.setBackgroundColor(Color.GREEN);
                        bottom_nav_view.setVisibility(View.VISIBLE);
                        bottom_nav_view.setBackgroundColor(Color.YELLOW);
                    }
                    offsetY = slideOffset;
                }

                @Override
                public void onStateChanged(@NonNull View bottomSheet, int newState) {
                }
            });
        }
    }
}

预期结果是类似于Youtube Player的BottoSheet。也就是说,其中包含一个片段RecyclerView和播放视频的BottomSheet。

XMLS

mycontroller_layout.xml
-----------------------
<RelativeLayout
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:id="@+id/relativelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:fitsSystemWindows="false"
tools:context=".myController">

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinatorlayout"
    android:layout_above="@+id/bottom_nav_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:fitsSystemWindows="false">

    <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.AppBarLayout>

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerInParent="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_vertical|center_horizontal"
        android:visibility="gone" />

    <include layout="@layout/content" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bottomsheet"/>

</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_nav_view"
    android:layout_below="@+id/coordinatorlayout"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:elevation="50dp"
    android:visibility="visible"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    app:itemIconTint="@color/colorWhite"
    android:background="@color/colorPrimary"
    app:menu="@menu/activity_main_bottom" />
</RelativeLayout>

content.xml
-----------
<RelativeLayout
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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="4dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".RebootController"
tools:showIn="@layout/reboot_controller_layout">
<RelativeLayout
    android:id="@+id/containerContent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
</RelativeLayout>
</RelativeLayout>

bottom_sheet_loyout.xml
-------------------
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rv_bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_nav_view"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:elevation="3dp"
android:fitsSystemWindows="false"
android:orientation="vertical"
app:layout_behavior="@string/bottom_sheet_behavior" >
<RelativeLayout
    android:id="@+id/rlVideoView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/srl_swipe"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/videoView">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:clipToPadding="false"
            android:paddingBottom="56dp"/>
    </android.support.v4.widget.SwipeRefreshLayout>

    <ProgressBar
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:visibility="gone" />
        <!--<LinearLayout
            anúncio google
        </LinearLayout>-->
</RelativeLayout>
</RelativeLayout>

0 个答案:

没有答案