Android 自定义高宽比布局

作者: 淡淡_孩子气 | 来源:发表于2018-08-13 18:23 被阅读11次
    • 直接上代码(代码可直接复制使用)
    新建RatioRelativeLayout 继承RelativeLayout
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.util.AttributeSet;
    import android.widget.RelativeLayout;
    
    /**
     * 自定义高宽比布局
     */
    public class RatioRelativeLayout extends RelativeLayout {
    
        private float ratio;
    
        public RatioRelativeLayout(Context context) {
            super(context);
        }
    
        public RatioRelativeLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            //获取自定义属性值
            TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioRelativeLayout);
            ratio = typedArray.getFloat(R.styleable.RatioRelativeLayout_ratio, 0.0f);
        }
    
        public RatioRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            //获取宽度的模式和尺寸
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            if (ratio != 0) {
                //根据宽高比ratio和模式创建一个测量值
                heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) (widthSize * ratio), MeasureSpec.EXACTLY);
            }
            //必须调用下面的两个方法之一完成onMeasure方法的重写,否则会报错
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    
        /**
         * 设置高宽比
         *
         * @param ratio 宽高比(比如:高:宽 = 4:5,ratio=0.8)
         */
        public void setRatio(float ratio) {
            this.ratio = ratio;
        }
    }
    
    
    在styles.xml文件中添加自定义属性
     <declare-styleable name="RatioRelativeLayout">
            <attr name="ratio" format="float" />
        </declare-styleable>
    
    使用
     <com.yate.jsq.widget.RatioRelativeLayout
            android:id="@id/common_relate_layout_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:ratio="1"/>      
    

    相关文章

      网友评论

      本文标题:Android 自定义高宽比布局

      本文链接:https://www.haomeiwen.com/subject/xkoubftx.html