1e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet/* 2e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Copyright (C) 2011 The Android Open Source Project 3e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * 4e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 5e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * you may not use this file except in compliance with the License. 6e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * You may obtain a copy of the License at 7e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * 8e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 9e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * 10e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 11e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 12e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * See the License for the specific language governing permissions and 14e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * limitations under the License. 15e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 16e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 17e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetpackage android.support.v7.widget; 18e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 19e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetimport android.content.Context; 20e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetimport android.graphics.Canvas; 21e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetimport android.util.AttributeSet; 22e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetimport android.view.View; 23e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetimport android.view.ViewGroup; 24e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 25e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet/** 26e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Space is a lightweight View subclass that may be used to create gaps between components 27e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * in general purpose layouts. 28e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 29e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohetpublic final class Space extends View { 30e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet /** 31e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * {@inheritDoc} 32e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 33e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet public Space(Context context, AttributeSet attrs, int defStyle) { 34e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet super(context, attrs, defStyle); 35e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet if (getVisibility() == VISIBLE) { 36e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet setVisibility(INVISIBLE); 37e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 38e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 39e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 40e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet /** 41e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * {@inheritDoc} 42e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 43e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet public Space(Context context, AttributeSet attrs) { 44e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet this(context, attrs, 0); 45e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 46e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 47e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet /** 48e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * {@inheritDoc} 49e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 50e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet public Space(Context context) { 51e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet //noinspection NullableProblems 52e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet this(context, null); 53e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 54e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 55e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet /** 56e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Draw nothing. 57e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * 58e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * @param canvas an unused parameter. 59e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 60e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet @Override 61e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet public void draw(Canvas canvas) { 62e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 63e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 64e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet /** 65e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * Compare to: {@link View#getDefaultSize(int, int)} 66e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * If mode is AT_MOST, return the child size instead of the parent size 67e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet * (unless it is too big). 68e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet */ 69e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet private static int getDefaultSize2(int size, int measureSpec) { 70e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet int result = size; 71e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet int specMode = MeasureSpec.getMode(measureSpec); 72e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet int specSize = MeasureSpec.getSize(measureSpec); 73e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 74e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet switch (specMode) { 75e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet case MeasureSpec.UNSPECIFIED: 76e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet result = size; 77e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet break; 78e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet case MeasureSpec.AT_MOST: 79e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet result = Math.min(size, specSize); 80e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet break; 81e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet case MeasureSpec.EXACTLY: 82e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet result = specSize; 83e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet break; 84e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 85e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet return result; 86e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 87e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet 88e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet @Override 89e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 90e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet setMeasuredDimension( 91e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec), 92e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec)); 93e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet } 94e1feb53bd8abfa46613fdd0abcf7a015c7e706c1Xavier Ducrohet} 95