Space is a lightweight View subclass that may be used to create gaps between components in general purpose layouts.

Space 是一个轻量级的 View 子类,可用于在通用布局中的组件之间创建间隙。


介绍

Space 经常用于组件之间的缝隙,其draw()为空,减少了绘制渲染的过程。组件之间的距离使用 Space 会提高了绘制效率,特别是对于动态设置间距会很方便高效。
正是因为draw()为空,对该 view 没有做任务绘制渲染,所以不能对 Space 设置背景色。


选择

Space 控件在 android 中有三个,分别是
- android.support.v7.widget.Space
- android.support.v4.widget.Space
- android.widget.Space

其中 v7 包的 Space 已经废弃,android.widget.Space是 android4.0 才添加的,而 v4 包的 Space 是为了兼容低版本的 android 系统。但是现在谷歌已经放弃了 android2.3 和 3.0,所以android.support.v4.widget.Spaceandroid.widget.Space任君选择其一,内部实现代码都一样,


源码分析

    package android.support.v4.widget;    import android.content.Context;    import android.graphics.Canvas;    import android.util.AttributeSet;    import android.view.View;    public class Space extends View {        public Space(Context context, AttributeSet attrs, int defStyle) {            super(context, attrs, defStyle);            if (getVisibility() == VISIBLE) {                setVisibility(INVISIBLE);            }        }        public Space(Context context, AttributeSet attrs) {            this(context, attrs, 0);        }        public Space(Context context) {            this(context, null);        }        /**         * Draw nothing.         *         * @param canvas an unused parameter.         */        @Override        public void draw(Canvas canvas) {        }        /**         * Compare to: {@link View#getDefaultSize(int, int)}         * If mode is AT_MOST, return the child size instead of the parent size         * (unless it is too big).         */        private static int getDefaultSize2(int size, int measureSpec) {            int result = size;            int specMode = MeasureSpec.getMode(measureSpec);            int specSize = MeasureSpec.getSize(measureSpec);            switch (specMode) {                case MeasureSpec.UNSPECIFIED:                    result = size;                    break;                case MeasureSpec.AT_MOST:                    result = Math.min(size, specSize);                    break;                case MeasureSpec.EXACTLY:                    result = specSize;                    break;            }            return result;        }        @Override        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {            setMeasuredDimension(                    getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec),                    getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec));        }    }

从源码中,我们可以看到Space的实现代码很简介。只是对控件的显示方式默认为INVISIBLE并重新计算view的宽高。


使用

  1. 在 xml 使用。注意,使用 v4 包的 Space 需要在 gradle 中导入 v4 包,或者导入 v7、v13 包。因为 v7 包内含有 v4 包,v13 包内也含有 v4 包。

        
  2. 在 java 代码使用。

            Space space = new Space(this);        space.setMinimumWidth(1);        space.setMinimumHeight(10);

更多相关文章

  1. Android客制化adb shell进去后显示shell@xxx的标识
  2. 转载:Sensor传感器源码的阅读与应用开发简单实例
  3. Android(安卓)Service简介
  4. android adb project
  5. 针对android游戏截图分享
  6. Android(安卓)2.3.3 SDK 源代码关联Eclipse
  7. apk 反编译源码 资源文件
  8. 浅谈android 四大组件 以及mvc mvp
  9. Android(安卓)开发(04)高级UI组件

随机推荐

  1. Android(安卓)Ant编译时候进行混淆
  2. android和js互相调用的问题
  3. ProgressBar 各种样式
  4. 自动打开USB调试
  5. android VersionCode 与VersionName
  6. tcpdump android
  7. 设备的search按钮调用自己程序的search模块
  8. [React-Native]Android(安卓)命令打包
  9. Android——Log,Toast提示框,Intent跳转
  10. android竖着的seekbar