ImageView - have height match width?

后端 未结 14 2457
长发绾君心
长发绾君心 2020-12-02 05:17

I have an imageview. I want its width to be fill_parent. I want its height to be whatever the width ends up being. For example:



        
14条回答
  •  不思量自难忘°
    2020-12-02 06:12

    Here I what I did to have an ImageButton which always have a width equals to its height (and avoid stupid empty margins in one direction...which I consider a as a bug of the SDK...):

    I defined a SquareImageButton class which extends from ImageButton:

    package com.myproject;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.widget.ImageButton;
    
        public class SquareImageButton extends ImageButton {
    
            public SquareImageButton(Context context) {
            super(context);
    
    
            // TODO Auto-generated constructor stub
        }
    
        public SquareImageButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
    
        }
    
        public SquareImageButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
    
        }
    
        int squareDim = 1000000000;
    
        @Override
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
    
            int h = this.getMeasuredHeight();
            int w = this.getMeasuredWidth();
            int curSquareDim = Math.min(w, h);
            // Inside a viewholder or other grid element,
            // with dynamically added content that is not in the XML,
            // height may be 0.
            // In that case, use the other dimension.
            if (curSquareDim == 0)
                curSquareDim = Math.max(w, h);
    
            if(curSquareDim < squareDim)
            {
                squareDim = curSquareDim;
            }
    
            Log.d("MyApp", "h "+h+"w "+w+"squareDim "+squareDim);
    
    
            setMeasuredDimension(squareDim, squareDim);
    
        }
    
    }
    

    Here is my xml:

    
    

    Works like a charm !

提交回复
热议问题