【问题标题】:Android Dialog Fragment RecyclerView wrap content but max height based on constraints?Android Dialog Fragment RecyclerView 包装内容但基于约束的最大高度?
【发布时间】:2019-11-03 21:29:30
【问题描述】:

所以我正在创建一个对话框片段以允许用户从一些选项中进行选择。我在约束布局中有一个非常简单的布局。 TextView 在顶部,recycler 视图,然后是底部的两个按钮。

问题是,我希望 recyclerview 包装内容,这样如果选项不多,对话框就会缩小。但是,如果有很多选项,我希望它展开,然后开始滚动,以便所有视图都在屏幕上可见。

我似乎无法摆脱它不断变大的情况。或者,如果我只允许包装内容,对话框将变得如此之大,以至于缺少底部按钮。

我假设它与某些特定的约束选项有关,但我无法弄清楚组合。有什么想法吗?

编辑:我知道一个简单的答案是在回收站视图上设置最大高度。我希望做同样的事情,但有限制,所以它不是固定的硬高度。

EDIT2:如果视图模型的高度是固定的,那么默认情况下,约束看起来会很好地使用 wrap。不过,我真的无法处理固定高度的视图模型......

谢谢

【问题讨论】:

  • 这里的任何答案都有效吗? (stackoverflow.com/questions/40850966/…)app:layout_constrainedHeight="true".
  • 创建一个覆盖onMeasure方法的customrecyclerview
  • @TylerV 嘿,它们仅在您的 ViewHolders 具有固定高度时才有效。如果这些是包装内容(我觉得这是大多数视图持有者),那么它的大小不正确。我的猜测是因为如果它的内容可以是动态的,它就不能可靠地知道如何调整大小。仅此一项与动态高度视图持有者一起使其始终增长到最大约束。

标签: android android-recyclerview android-constraintlayout android-dialogfragment


【解决方案1】:

创建一个覆盖 onMeasure 方法的 customRecyclerView。

public class CustomRecyclerView extends RecyclerView{

    public CustomRecyclerView (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomRecyclerView (Context context) {
        super(context);
    }

    public CustomRecyclerView (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}

你可以这样调用recyclerview

<com.example.yourpackage.CustomRecyclerView>

【讨论】:

  • 所以没有办法用现有的 RecyclerView 解决它吧?似乎 Recyclerviews 和 DialogFragments 之间存在差距。好吧,将采用这种方法。谢谢。
猜你喜欢
  • 2022-07-26
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多