使DialogFragment窗口可滚动

时间:2016-03-17 09:35:55

标签: android dialogfragment

我遇到的问题是,当内容对于屏幕来说太大时,Dialogs不会滚动。我认为这是因为Dialogs不会显示在Scrollable容器中。

enter image description here

屏幕截图包含ScrollView中包含的内容 - 您只能看到内容可滚动

添加额外字段以人为增加此示例的对话框大小

你可以从Android Developer Documentation看到对话框应该包含在DialogFragments中(这样可以让你的对话框在方向更改和对生命周期事件的响应中存活下来)这就是我正在尝试的设置做好工作。

我发现的其他许多答案都是相似的,并围绕确保窗口设置为“adjustResize”。但是,这只会使键盘打开时父视图变小,如果它不在Scrollable容器中,则不会使View可滚动。

如果有人可以让我知道他们是否有可以使Dialog滚动的信息,或者确认你不能使Dialog可滚动,我会很感激。

3 个答案:

答案 0 :(得分:1)

我已经实现了对话框片段的滚动,

对话框布局设计

<LinearLayout>
 <NestedScrollView>
   <ConstrainLayout>
   </ConstrainLayout>
 </NestedScrollView>
</LinearLayout>

在DialogFrament类中,

override fun onStart() {
  super.onStart()
       dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZ)
    }

答案 1 :(得分:0)

这可能是解决这个问题的最脏和最有可能的解决方案:

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);
        }
    });

答案 2 :(得分:0)

我对DialogFragment遇到了同样的问题,但我改变了:

<fragment android:layout_height="425dp"
...

到此:

<fragment android:layout_height="wrap_content" 
...

现在,当键盘打开或屏幕处于横向模式时,它会滚动。

注意:我当然将ScrollView作为DialogFragment布局中的rootView。