这是我对BottomSheetDialog的布局。我内部也有网格布局。该网格布局的滚动不正确。我的意思是只在BottomSheetDialog的展开状态下滚动。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_behavior="@string/bottom_sheet_behavior"
>
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/view_padding_medium"
android:gravity="center_vertical">
<ImageView
android:layout_width="@dimen/profile_image"
android:layout_height="@dimen/profile_image"
android:src="@drawable/icon" />
<TextView
android:id="@+id/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_padding_medium"
android:text="@string/smart_action_share"
android:textColor="@color/white"
/>
</LinearLayout>
<GridView
android:id="@+id/gridView11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"
>
</GridView>
</LinearLayout>
这是我创建 Bottom Sheet 对话框的方式:
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context);
LayoutInflater inflater = ((Activity) Constants.getContext()).getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_share1, null);
bottomSheetDialog.setContentView(view);
final GridView grid = (GridView) view.findViewById(R.id.gridView11);
CustomAdapter adapter = new CustomAdapter (context);
grid.setAdapter(adapter);
bottomSheetDialog.show();
如何访问对话框的行为,以便我可以修复网格布局滚动或是否有其他解决方法?
只是为了澄清一切:
不论底纸状态如何,都应每次启用网格 View 滚动。
最佳答案
我认为您不应该这样做,因为BottomSheet的高度应与内容的高度匹配。
这意味着,如果内容是可滚动的并且超过了父级的高度,则由于默认行为,只有在扩展BottomSheet时滚动才起作用。
要访问该行为,可以执行以下操作:
View view = inflater.inflate(R.layout.dialog_share1, null);
bottomSheetDialog.setContentView(view);
BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent());
然后,要自定义不同于扩展状态的行为:
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet,
@BottomSheetBehavior.State int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}else{
if (newState != BottomSheetBehavior.STATE_EXPANDED) {
// Implement your logic here
}
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset){
}
};