最近,使用 fresco 的 SimpleDraweeView 的时候才发现这个 view 不能设置高度为 wrap_content,但是不同的手机,或者是每一行显示的数量不一样,要想让子view的宽高相等,就需要在代码里边获取屏幕的宽度,然后平分,得到宽度后设置相应的高度。
package com.yourproject.utils;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by xiaobian on 2017/3/15.
* 这个类中只有一个方法,设置高度跟宽度一样,宽度获取屏幕宽度均分
*/
public class LayoutUtil {
/**
* @param context context 上下文
* @param view 需要设置的view
* @param ratio 屏幕宽度均分为几个view
* @param space 间隔宽度 dp
*/
public static void setHeightAsWidth(Context context, View view, int ratio, int space) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
//获取屏幕宽度和高度
int width = dm.widthPixels;
int height = dm.heightPixels;
ViewGroup.LayoutParams params = view.getLayoutParams();
//用屏幕的宽度减去间隔的宽度,然后均等分。
//CommonTools.dp2px(context, space) * (ratio - 1) 这个是所有间隔的宽度之和
int length = (width - CommonTools.dp2px(context, space) * (ratio - 1)) / ratio;
params.width = length;
params.height = length;//设置当前控件布局的高度
view.setLayoutParams(params);//将设置好的布局参数应用到控件中
}
}
所有注释都很明白,先获取屏幕的宽度,然后由等分的份数和间隔的宽度,经过计算得到每个view的宽度应该是多少,然后设置宽度和高度一样就ok了。
网友评论