无法隐藏底部 Sheet、Android
Can't hide Bottom Sheet, Android
我的 bottom-sheet 有问题,因为当我打开 activity 时它是开着的,挡住了视线
我认为发生这种情况是因为 XML 属性声明 bottom-sheet 的高度为 350dp:
<android.support.v4.widget.NestedScrollView
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="?android:attr/windowBackground"
android:clipToPadding="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
问题是,我无法将该值更改为 0dp,因为下次我尝试打开 bottom-sheet 时,没有 bottom-sheet,因为高度是 0dp,所以它不会显示任何内容。
我的问题是,有没有办法宣布 bottom-sheet 关闭? (我尝试将 setState 设置为 STATE_COLLAPSED 但没有成功)。
下面是与底部 Sheet 交互的 java 代码。
JAVA:
View bottomSheet = findViewById( R.id.bottom_sheet );
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
//mBottomSheetBehavior.setPeekHeight(0);
//mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
//mBottomSheetBehavior.isHideable();
}
}
@Override
public void onSlide(View bottomSheet, float slideOffset) {
}
});
这样写:
mBottomSheetBehavior.setPeekHeight(0);
首先你必须添加属性
app:behavior_hideable="true"
在你的
<android.support.v4.widget.NestedScrollView
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="?android:attr/windowBackground"
android:clipToPadding="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
然后您可以使用
隐藏底部 sheet
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN)
而不是
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)
COLLAPSED 状态介于 HIDDEN 和 EXPANDED 之间,其高度必须由属性指定:
app:behavior_peekHeight="200dp"
在onCreate
里面添加这几行,可以隐藏bottombar
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setHideable(true); //Important to add
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); //Important to add
在我的例子中,我使用的是 BottomSheetDialog
。
app:behavior_hideable
- 属性用于确定我们的底部sheet是否会在向下滑动时隐藏.换句话说 bottom sheet top 在屏幕外,如果没有设置 peek 高度。
app:behavior_peekHeight
- 属性值用于表示底部 sheet 可见的像素数。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="10dp"
android:orientation="vertical"
android:background="@color/colorPrimaryDerived"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"> ........... </LinearLayout>
我将 peekHeight 设置为 50dp。并且 peek 高度与我设置 200dp 的 bottomSheet 布局高度本身无关(仅作为示例)。
如果底部 sheet 已展开,您可以在 XML 查看器中查看更改,如果是这样,请从 xml 布局添加 app:behavior_peekHeight = 0dp
,它将隐藏并通知您当前状态。
在我的例子中,我无法隐藏 bottomsheet,它被放置在我的视图之上。我发现我的布局文件中的 animateLayoutChanges = "true"
导致了这个问题。
您可以通过将父线性布局的可见性设置为消失来手动隐藏该底部 sheet
当你想要
时,将此行放入你的代码中
if (confirmLayoutBehaviour.getState() != BottomSheetBehavior.STATE_EXPANDED) {
//todo hide your bottom sheet if its already open
confirmLayout.setVisibility(View.GONE);
} else {
//set it to visible if its not open
confirmLayout.setVisibility(View.VISIBLE);
}
对我有用请试试
折叠时设置app:behavior_hideable="false"
您只需简单地添加以下代码即可完美运行。
隐藏底页:-
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
显示底页:-
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
我的 bottom-sheet 有问题,因为当我打开 activity 时它是开着的,挡住了视线
我认为发生这种情况是因为 XML 属性声明 bottom-sheet 的高度为 350dp:
<android.support.v4.widget.NestedScrollView
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="?android:attr/windowBackground"
android:clipToPadding="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
问题是,我无法将该值更改为 0dp,因为下次我尝试打开 bottom-sheet 时,没有 bottom-sheet,因为高度是 0dp,所以它不会显示任何内容。 我的问题是,有没有办法宣布 bottom-sheet 关闭? (我尝试将 setState 设置为 STATE_COLLAPSED 但没有成功)。 下面是与底部 Sheet 交互的 java 代码。 JAVA:
View bottomSheet = findViewById( R.id.bottom_sheet );
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
//mBottomSheetBehavior.setPeekHeight(0);
//mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
//mBottomSheetBehavior.isHideable();
}
}
@Override
public void onSlide(View bottomSheet, float slideOffset) {
}
});
这样写:
mBottomSheetBehavior.setPeekHeight(0);
首先你必须添加属性
app:behavior_hideable="true"
在你的
<android.support.v4.widget.NestedScrollView
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="?android:attr/windowBackground"
android:clipToPadding="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
然后您可以使用
隐藏底部 sheetmBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN)
而不是
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)
COLLAPSED 状态介于 HIDDEN 和 EXPANDED 之间,其高度必须由属性指定:
app:behavior_peekHeight="200dp"
在onCreate
里面添加这几行,可以隐藏bottombar
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setHideable(true); //Important to add
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); //Important to add
在我的例子中,我使用的是 BottomSheetDialog
。
app:behavior_hideable
- 属性用于确定我们的底部sheet是否会在向下滑动时隐藏.换句话说 bottom sheet top 在屏幕外,如果没有设置 peek 高度。
app:behavior_peekHeight
- 属性值用于表示底部 sheet 可见的像素数。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="10dp"
android:orientation="vertical"
android:background="@color/colorPrimaryDerived"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"> ........... </LinearLayout>
我将 peekHeight 设置为 50dp。并且 peek 高度与我设置 200dp 的 bottomSheet 布局高度本身无关(仅作为示例)。
如果底部 sheet 已展开,您可以在 XML 查看器中查看更改,如果是这样,请从 xml 布局添加 app:behavior_peekHeight = 0dp
,它将隐藏并通知您当前状态。
在我的例子中,我无法隐藏 bottomsheet,它被放置在我的视图之上。我发现我的布局文件中的 animateLayoutChanges = "true"
导致了这个问题。
您可以通过将父线性布局的可见性设置为消失来手动隐藏该底部 sheet 当你想要
时,将此行放入你的代码中if (confirmLayoutBehaviour.getState() != BottomSheetBehavior.STATE_EXPANDED) {
//todo hide your bottom sheet if its already open
confirmLayout.setVisibility(View.GONE);
} else {
//set it to visible if its not open
confirmLayout.setVisibility(View.VISIBLE);
}
对我有用请试试
折叠时设置app:behavior_hideable="false"
您只需简单地添加以下代码即可完美运行。
隐藏底页:-
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
显示底页:-
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED