监听recyclerView的绘制完成之后,重新测量高度,如果高度超过最大高度的话,重新给recyclerView设置高度。如果是dialog的话,可以设置一下显示位置
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //设置最大高度 recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this); int recyclerViewRealHeight = recyclerView.computeVerticalScrollRange(); if (recyclerViewRealHeight > 800){ LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) recyclerView.getLayoutParams(); layoutParams.height = 800; recyclerView.setLayoutParams(layoutParams); Window window = getWindow(); window.setGravity(Gravity.CENTER); WindowManager.LayoutParams lp = window.getAttributes(); lp.gravity = Gravity.CENTER; window.setAttributes(lp); } } });