android的Space控件使用方式

来源:互联网 发布:过期未注册域名查询 编辑:程序博客网 时间:2024/04/30 16:27

Space顾名思义是空间的意思,表示该控件占据一定的空间,但是却不显示任何东西。

使用Space

 <android.support.v4.widget.Space    android:layout_width="match_parent"    android:layout_height="60dp" /> 

源码分析

/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.widget;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;/** * Space is a lightweight View subclass that may be used to create gaps between components * in general purpose layouts. */public final class Space extends View {    /**     * {@inheritDoc}     */    public Space(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);        if (getVisibility() == VISIBLE) {            setVisibility(INVISIBLE);        }    }    /**     * {@inheritDoc}     */    public Space(Context context, AttributeSet attrs, int defStyleAttr) {        this(context, attrs, defStyleAttr, 0);    }    /**     * {@inheritDoc}     */    public Space(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    /**     * {@inheritDoc}     */    public Space(Context context) {        //noinspection NullableProblems        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));    }}

该控件直接继承View组件,基本每个View控件都有onDraw方法用来绘制自身,而Space控件onDraw方法进行了一个空的实现。

Space控件在布局中只占位置,而不去绘制渲染。
组件中的间隙用Space控件填充比用其它控件填充可以提高绘制效率。

0 0