【问题标题】:Making DialogFragment window scrollable使 DialogFragment 窗口可滚动
【发布时间】:2016-03-17 09:35:54
【问题描述】:

我遇到了一个问题,即当其内容对于屏幕而言太大时,对话框不会滚动。我认为这是因为Dialogs 没有显示在可滚动容器中。

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

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

您可以从Android Developer Documentation 中看到,对话框应该包装在 DialogFragments 中(这样可以使您的对话框在方向更改和生命周期事件响应中幸存下来),这是我正在尝试进行的设置.

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

如果有人可以让我知道他们是否有信息可以使 Dialog 可滚动或确认您不能使 Dialog 可滚动,我将不胜感激。

【问题讨论】:

    标签: android dialogfragment


    【解决方案1】:

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

    对话框布局设计

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

    在DialogFrament类中,

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

    【讨论】:

    • 在 NestedScrollView 中包装所有内容都可以在没有外部 LinearLayout 的情况下工作
    • @Jeffrey 但是添加 LinearLayout 不是必需的和良好的做法吗?
    【解决方案2】:

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

    onCreateDialog()中创建Dialog后但在返回之前可以通过添加以下代码实现滚动:

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

    【讨论】:

      【解决方案3】:

      我在使用 DialogFragment 时遇到了同样的问题,但我改变了:

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

      到这里:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 2012-01-18
        • 2017-07-19
        • 2012-04-27
        相关资源
        最近更新 更多