我有底页的布局。
Teacher.find(:all, params: {gender: "male'})
底页布局
Teacher.find(:all, params: { subject: { student: grade == "one" }})
对我来说,我的底页必须打开前半部分,重新拖动后才能全屏显示。如何在Google Maps应用中完成。但是我不知道该怎么做。
答案 0 :(得分:2)
尽管已经回答了这个问题,但是有了另一种实现此行为的方法,可以与他人共享。
创建一个全局变量,并使用 BottomSheetBehavior 的默认状态对其进行初始化,例如
int state = BottomSheetBehavior.STATE_COLLAPSED;
然后,在 BottomSheetBehavior.BottomSheetCallback 中将您的 state 变量更新为当前状态
和中 BottomSheetBehavior.STATE_DRAGGING ,如果状态未扩展一半,则
将状态设置为 BottomSheetBehavior.STATE_HALF_EXPANDED
sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View view, int i) {
switch (i) {
case BottomSheetBehavior.STATE_COLLAPSED:
state = BottomSheetBehavior.STATE_COLLAPSED;
binder.imgRefresh.setVisibility(View.GONE);
break;
case BottomSheetBehavior.STATE_EXPANDED:
binder.imgRefresh.setVisibility(View.VISIBLE);
state = BottomSheetBehavior.STATE_EXPANDED;
break;
case BottomSheetBehavior.STATE_DRAGGING:
if (state != BottomSheetBehavior.STATE_HALF_EXPANDED) {
sheetBehavior.setState(BottomSheetBehavior.STATE_HALF_EXPANDED);
}
break;
case BottomSheetBehavior.STATE_HALF_EXPANDED:
state = BottomSheetBehavior.STATE_HALF_EXPANDED;
break;
}
}
@Override
public void onSlide(@NonNull View view, float v) {
binder.viewExtender.setAlpha(1 - v);
}
});
这将使您的BottomSheet采取三个步骤,即崩溃,半扩展,扩展。
希望它可以帮助某人!
答案 1 :(得分:2)
最好使用具有全部潜力的框架。正如方法setFitToContents的官方文档所述:
设置展开的图纸的高度是由其内容的高度决定的,还是以两个阶段展开(父对象的高度的一半) 容器,父容器的全高)。默认值为true。
因此,您需要通过以下方式将setFitToContent
设置为false
:
behavior = BottomSheetBehavior.from(your_bottom_sheet_xml)
behavior.isFitToContents = false
behavior.halfExpandedRatio = 0.6f
使用此三行代码,底页首先将扩展到屏幕的60%,然后再完全扩展到100%。
希望有帮助!
答案 2 :(得分:1)
只需将 BottomSheetBehaivor 状态设置为 BottomSheetBehavior.STATE_HALF_EXPANDED 。 另外,如果您需要在完全展开后让用户再次回到一半展开模式,则需要将窥视高度设置为窗口高度的一半。
val bottomSheetBehavior = BottomSheetBehavior.from<NestedScrollView>(bottom_sheet)
val metrics = resources.displayMetrics
bottomSheetBehavior.peekHeight = metrics.heightPixels / 2
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
答案 3 :(得分:1)
class BottomSheetFragment : BottomSheetDialogFragment() {
/* inside of your Bottom Sheet Dialog Fragment */
override fun onStart() {
super.onStart()
BottomSheetBehavior.from(requireView().parent as View).apply {
state = BottomSheetBehavior.STATE_HALF_EXPANDED
}
}
}
答案 4 :(得分:0)
我尝试了@Massab和@HeyAlex,但是与我期望的行为不匹配。
在kotlin中采用以下解决方案,如果您的底片滑动接近扩展状态,则保持扩展状态;如果接近一半状态,则保持一半状态;如果接近崩溃,则保持崩溃状态:
val bottomSheet = view.findViewById<View>(R.id.bottom_sheet1)
val mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
mBottomSheetBehavior.addBottomSheetCallback(object: BottomSheetBehavior.BottomSheetCallback(){
override fun onStateChanged(bottomSheet: View, newState: Int) {
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {
val upperState = 0.66
val lowerState = 0.33
if(slideOffset >= upperState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
if(slideOffset > lowerState && slideOffset < upperState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
}
if(slideOffset <= lowerState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
}
}
})