Android 使DialogFragment窗口可滚动
我遇到了一个问题,当对话框的内容对于屏幕来说太大时,对话框不会滚动。我认为这是因为对话框不显示在可滚动的容器中 屏幕截图包含包装在滚动视图中的内容-您只能看到可滚动的内容 在本例中,为人为增加对话框大小而添加的额外字段 您可以从中看到,对话框应该包装在DialogFragments中,这有助于使您的对话框在方向更改和对生命周期事件的响应中幸存下来,这就是我正在尝试的设置 我发现的许多其他答案都彼此相似,并围绕着确保窗口设置为可调整大小。然而,这只会使键盘打开时的父视图变小,如果视图不在可滚动的容器中,则不会使其可滚动Android 使DialogFragment窗口可滚动,android,dialogfragment,Android,Dialogfragment,我遇到了一个问题,当对话框的内容对于屏幕来说太大时,对话框不会滚动。我认为这是因为对话框不显示在可滚动的容器中 屏幕截图包含包装在滚动视图中的内容-您只能看到可滚动的内容 在本例中,为人为增加对话框大小而添加的额外字段 您可以从中看到,对话框应该包装在DialogFragments中,这有助于使您的对话框在方向更改和对生命周期事件的响应中幸存下来,这就是我正在尝试的设置 我发现的许多其他答案都彼此相似,并围绕着确保窗口设置为可调整大小。然而,这只会使键盘打开时的父视图变小,如果视图不在可滚动的容
如果有人能告诉我他们是否有使对话框可滚动的信息,或者确认您不能使对话框可滚动,我将不胜感激。这可能是解决此问题的最肮脏和最可能的方法: 在onCreateDialog中创建对话框后,但在返回对话框之前,可以通过添加以下代码实现滚动:
final ViewGroup content = (ViewGroup) dialog.findViewById(android.R.id.content);
content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
content.getViewTreeObserver().removeGlobalOnLayoutListener(this);
View inner = content.getChildAt(0);
content.removeViewAt(0);
ScrollView scrollView = new ScrollView(getContext());
scrollView.addView(inner);
content.addView(scrollView);
}
});
DialogFragment也有同样的问题,但我改变了:
<fragment android:layout_height="425dp"
...
为此:
<fragment android:layout_height="wrap_content"
...
现在,当键盘打开或屏幕处于横向模式时,它会滚动
注意:当然,我在DialogFragment布局中将ScrollView作为根视图使用。我在DialogFragment中实现了滚动 对话框布局设计
<LinearLayout>
<NestedScrollView>
<ConstrainLayout>
</ConstrainLayout>
</NestedScrollView>
</LinearLayout>
在NestedScrollView中包装所有内容在没有外部LinearLayout@Jeffrey但是,线性布局是否有必要和良好的实践中添加它?
override fun onStart() {
super.onStart()
dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZ)
}