设置最大高度,有很多方法,我个人比较喜欢的是下面这种方式 ,这里的view即添加到

  view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
int height = view.getHeight();
int maxHeight = DensityUtils.dpToPx(mHomeActivity, 200);
if(height> maxHeight){
            //这里也可采用现获取layoutParams
view.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,maxHeight));
//这里一定是frameLayout,不然会转换异常,由此可见alertdialog底层是frameLayout
} }
});

2.在dialog中含有recyclerView或者listview,用的relativeLayout,结果listview下面会被截取掉,这里应该这么处理

 view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
int height = mDeviceList.getHeight();
int maxHeight = DensityUtils.dpToPx(mHomeActivity, 200); if(height> maxHeight){
//必须首先获取控件的layoutParams,然后再更改,new一个不行
ViewGroup.LayoutParams layoutParams = mDeviceList.getLayoutParams();
layoutParams.height = maxHeight;
mDeviceList.setLayoutParams(layoutParams);
} }
});

这种方法会导致recyclerview的点击事件,不能及时响应。原因暂时不明

05-04 02:00