Фрагмент диалогового окна Android RecyclerПросматривает содержимое, но максимальная высота зависит от ограничений? - PullRequest
3 голосов
/ 04 ноября 2019

Итак, я работаю над созданием фрагмента диалога, чтобы пользователь мог выбрать один из вариантов. У меня есть довольно простой макет внутри макета ограничения. TextView сверху, вид рециркулятора, затем две кнопки внизу.

Проблема в том, что я хочу, чтобы просмотр рециркулятора заключал в себе содержимое, так что если вариантов не так много, диалоговое окно будет свернуто. ,Однако, если вариантов много, я бы хотел, чтобы они расширились, но затем начните прокрутку, чтобы все виды были видны на экране.

Кажется, я не могу выйти из ситуации, когда он постояннобольшой. Или, если я просто разрешу перенос содержимого, диалоговое окно вырастет настолько большим, что отсутствуют нижние кнопки.

Я предполагаю, что это как-то связано с некоторыми конкретными параметрами ограничения, но я не могу понять комбинацию,Есть идеи?

РЕДАКТИРОВАТЬ: я знаю, простой ответ заключается в том, чтобы установить максимальную высоту в представлении переработчика. Я надеюсь сделать то же самое, но с ограничениями, так что это не фиксированная жесткая высота.

EDIT2: похоже, что ограничения будут хорошо работать с переносом по умолчанию, если высота модели представления фиксирована. Я действительно не могу иметь дело с моделью вида с фиксированной высотой, хотя ...

Спасибо

1 Ответ

0 голосов
/ 04 ноября 2019

Создайте customRecyclerView, который переопределяет метод onMeasure.

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

}

, который вы можете вызвать в программе восстановления, как этот

<com.example.yourpackage.CustomRecyclerView>
...