ImageView be a square with dynamic width? ImageView be a square with dynamic width? android android

ImageView be a square with dynamic width?


The best option is to subclass ImageView yourself, overriding the measure pass:

public class SquareImageView  extends ImageView {  ...  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    super.onMeasure(widthMeasureSpec, heightMeasureSpec);    int width = getMeasuredWidth();    setMeasuredDimension(width, width);  }  ...}


The other answer works fine. This is just an extension of bertucci's solution to make an ImageView with square width and height with respect to xml inflated layout.

Create a class, say a SquareImageView extending ImageView like this,

public class SquareImageView extends ImageView {    public SquareImageView(Context context) {        super(context);    }    public SquareImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int width = getMeasuredWidth();        setMeasuredDimension(width, width);    }}

Now, in your xml do this,

        <com.packagepath.tothis.SquareImageView            android:id="@+id/Imageview"            android:layout_width="fill_parent"            android:layout_height="fill_parent" />

If you need an ImageView not to be dynamically created in program, instead, to be fixed in xml, then this implementation will be helpful.


Even more simple:

public class SquareImageView extends ImageView {    ...    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, widthMeasureSpec);    }    }