2

我正嘗試在點擊按鈕時使用ndroid-support-library 23.2調用BottomSheet。它的工作正常,但沒有充分的高度。它位於AppBarLayout以下。我沒有找到Android Documentation如何設置BottomSheet完整父級的高度?

任何解決方案這是我的屏幕布局

enter image description here

enter image description here

這裏是我的代碼。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 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/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 
    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="snap|enterAlwaysCollapsed" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 
     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      app:tabGravity="fill" 
      app:tabIndicatorColor="#5be5ad" 
      app:tabIndicatorHeight="4dp" 
      app:tabMode="fixed" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" /> 

    <!-- BottomSheet Layout --> 
    <FrameLayout 
     android:id="@+id/bottom_sheet" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     app:behavior_hideable="true" 
     app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 

    </FrameLayout> 

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

MainActivity.java

View bottomSheet; 
private BottomSheetDialog mBottomSheetDialog; 

private void initView(){ 
     /* 
     Bottom Sheet Initialization 
     */ 
     CoordinatorLayout coordinatorLayout = (CoordinatorLayout)findViewById(R.id.main_content); 
     // The View with the BottomSheetBehavior 
     bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet); 
     behavior = BottomSheetBehavior.from(bottomSheet); 
//  behavior.setState(BottomSheetBehavior.STATE_HIDDEN); 
     behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
      @Override 
      public void onStateChanged(@NonNull View bottomSheet, int newState) { 
       // React to state change 
       CommonMethods.getInstance().e("onStateChanged", "onStateChanged:" + newState); 
       if (newState == BottomSheetBehavior.STATE_EXPANDED) { 
        fab.setVisibility(View.GONE); 
       } else { 
        fab.setVisibility(View.VISIBLE); 
       } 
      } 

      @Override 
      public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
       // React to dragging events 
       CommonMethods.getInstance().e("onSlide", "onSlide"); 
      } 
     }); 

     behavior.setPeekHeight(100); 

    } 

Click事件代碼:

@Override 
    public void onShareClick() { 
     if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { 
      behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
     } 
     if(mBottomSheetDialog==null){ 
      mBottomSheetDialog = new BottomSheetDialog(this); 
      View view = getLayoutInflater().inflate(R.layout.layout_bottomsheet, null); 
      mBottomSheetDialog.setContentView(view); 
     } 

     mBottomSheetDialog.show(); 
     mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
      @Override 
      public void onDismiss(DialogInterface dialog) { 
       mBottomSheetDialog = null; 
      } 
     }); 
    } 

回答

0

不使用BottomSheetDialog只使用默認的行爲像下面(刪除BottomSheetDialog代碼)

@Override 
    public void onShareClick() { 
    if (behavior.getState() == BottomSheetBehavior.STATE_HIDDEN || behavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) { 
      behavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
    } else { 
      behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
    } 
} 

使用BottomSheet佈局match_parent

<FrameLayout 
     android:id="@+id/bottom_sheet" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:behavior_hideable="true" 
     app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 

</FrameLayout> 

通過以上的修改,你必須看到BottomSheet與全屏

+0

它低於AppBarlayout,但它應該重疊AppBarLayout –

+0

做以上更改之後,其預期的工作 –

+0

我曾試過你的代碼,但它沒有覆蓋工具欄,它將behing工具欄。 –

0
public class ScreenUtils { 

    Context ctx; 
    DisplayMetrics metrics; 

    public ScreenUtils(Context ctx) { 
     this.ctx = ctx; 
     WindowManager wm = (WindowManager) ctx 
       .getSystemService(Context.WINDOW_SERVICE); 

     Display display = wm.getDefaultDisplay(); 
     metrics = new DisplayMetrics(); 
     display.getMetrics(metrics); 

    } 

    public int getHeight() { 
     return metrics.heightPixels; 
    } 

    public int getWidth() { 
     return metrics.widthPixels; 
    } 

    public int getRealHeight() { 
     return metrics.heightPixels/metrics.densityDpi; 
    } 

    public int getRealWidth() { 
     return metrics.widthPixels/metrics.densityDpi; 
    } 

    public int getDensity() { 
     return metrics.densityDpi; 
    } 

    public int getScale(int picWidth) { 
     Display display 
       = ((WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE)) 
       .getDefaultDisplay(); 
     int width = display.getWidth(); 
     Double val = new Double(width)/new Double(picWidth); 
     val = val * 100d; 
     return val.intValue(); 
    } 
} 

使用上面的類,我們可以設置偷看高度一樣這會給屏幕的最大黑GHT。

BottomSheetBehavior mBehavior = BottomSheetBehavior.from((View) contentView.getParent()); 
     ScreenUtils screenUtils=new ScreenUtils(getActivity()); 
     mBehavior.setPeekHeight(screenUtils.getHeight()); 
+0

請問您是否可以解釋一下上面的類和代碼如何解決這個問題? – Kezz101

0

更換

behavior.setPeekHeight(100); 

behavior.setPeekHeight(screenUtils.getHeight()); 

將解決你的問題。

相關問題