自定义高度与宽度都相等的RelativeLayout

来源:互联网 发布:写作文软件app 编辑:程序博客网 时间:2024/05/31 19:23

最近公司的项目有个页面需要做成类似与微信发表动态时提醒谁看的效果:


GridView的item是正方形,而android需要适配不同尺寸的手机,所以不能写死item的高度和宽度。因为GridView是可以根据numColumns来分配item的宽度的,所以我们把item布局的高度设为与宽度一样就能实现适配了。

自定义高度与宽度都相等的RelativeLayout:

/** * Created by Administrator on 2016/9/27 0027. * 高与宽相等的RelativeLayout */public class SquareLayout extends RelativeLayout {    public SquareLayout(Context context) {        super(context);    }    public SquareLayout(Context context, AttributeSet attrs) {        super(context, attrs);    }    public SquareLayout(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        // For simple implementation, or internal size is always 0.        // We depend on the container to specify the layout size of        // our view. We can't really know what it is since we will be        // adding and removing different arbitrary views and do not        // want the layout to change as this happens.        this.setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));        // Children are just made to fill our space.        int childWidthSize = getMeasuredWidth();        //设置高度与宽度一样        heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }}
item的布局:

<?xml version="1.0" encoding="utf-8"?><com.yifan.viewmine.SquareLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ImageView        android:id="@+id/civ"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:scaleType="centerCrop"        android:src="@mipmap/duck" /></com.yifan.viewmine.SquareLayout>
activity的代码就不贴出来了。

最后上效果图:


GridView的宽度设小点:





1 0