141c3dc66312394771e0cb147713e124ecd445055Chris Banes/* 241c3dc66312394771e0cb147713e124ecd445055Chris Banes * Copyright (C) 2015 The Android Open Source Project 341c3dc66312394771e0cb147713e124ecd445055Chris Banes * 441c3dc66312394771e0cb147713e124ecd445055Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 541c3dc66312394771e0cb147713e124ecd445055Chris Banes * you may not use this file except in compliance with the License. 641c3dc66312394771e0cb147713e124ecd445055Chris Banes * You may obtain a copy of the License at 741c3dc66312394771e0cb147713e124ecd445055Chris Banes * 841c3dc66312394771e0cb147713e124ecd445055Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 941c3dc66312394771e0cb147713e124ecd445055Chris Banes * 1041c3dc66312394771e0cb147713e124ecd445055Chris Banes * Unless required by applicable law or agreed to in writing, software 1141c3dc66312394771e0cb147713e124ecd445055Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 1241c3dc66312394771e0cb147713e124ecd445055Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341c3dc66312394771e0cb147713e124ecd445055Chris Banes * See the License for the specific language governing permissions and 1441c3dc66312394771e0cb147713e124ecd445055Chris Banes * limitations under the License. 1541c3dc66312394771e0cb147713e124ecd445055Chris Banes */ 1641c3dc66312394771e0cb147713e124ecd445055Chris Banes 1741c3dc66312394771e0cb147713e124ecd445055Chris Banespackage android.support.v4.widget; 1841c3dc66312394771e0cb147713e124ecd445055Chris Banes 1941c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.content.Context; 2041c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.graphics.Canvas; 2141c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.util.AttributeSet; 2241c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.view.View; 2341c3dc66312394771e0cb147713e124ecd445055Chris Banes 2441c3dc66312394771e0cb147713e124ecd445055Chris Banes/** 2541c3dc66312394771e0cb147713e124ecd445055Chris Banes * Space is a lightweight {@link View} subclass that may be used to create gaps between components 2641c3dc66312394771e0cb147713e124ecd445055Chris Banes * in general purpose layouts. 2741c3dc66312394771e0cb147713e124ecd445055Chris Banes */ 2841c3dc66312394771e0cb147713e124ecd445055Chris Banespublic class Space extends View { 2941c3dc66312394771e0cb147713e124ecd445055Chris Banes 3041c3dc66312394771e0cb147713e124ecd445055Chris Banes public Space(Context context, AttributeSet attrs, int defStyle) { 3141c3dc66312394771e0cb147713e124ecd445055Chris Banes super(context, attrs, defStyle); 3241c3dc66312394771e0cb147713e124ecd445055Chris Banes if (getVisibility() == VISIBLE) { 3341c3dc66312394771e0cb147713e124ecd445055Chris Banes setVisibility(INVISIBLE); 3441c3dc66312394771e0cb147713e124ecd445055Chris Banes } 3541c3dc66312394771e0cb147713e124ecd445055Chris Banes } 3641c3dc66312394771e0cb147713e124ecd445055Chris Banes 3741c3dc66312394771e0cb147713e124ecd445055Chris Banes public Space(Context context, AttributeSet attrs) { 3841c3dc66312394771e0cb147713e124ecd445055Chris Banes this(context, attrs, 0); 3941c3dc66312394771e0cb147713e124ecd445055Chris Banes } 4041c3dc66312394771e0cb147713e124ecd445055Chris Banes 4141c3dc66312394771e0cb147713e124ecd445055Chris Banes public Space(Context context) { 4241c3dc66312394771e0cb147713e124ecd445055Chris Banes this(context, null); 4341c3dc66312394771e0cb147713e124ecd445055Chris Banes } 4441c3dc66312394771e0cb147713e124ecd445055Chris Banes 4541c3dc66312394771e0cb147713e124ecd445055Chris Banes /** 4641c3dc66312394771e0cb147713e124ecd445055Chris Banes * Draw nothing. 4741c3dc66312394771e0cb147713e124ecd445055Chris Banes * 4841c3dc66312394771e0cb147713e124ecd445055Chris Banes * @param canvas an unused parameter. 4941c3dc66312394771e0cb147713e124ecd445055Chris Banes */ 5041c3dc66312394771e0cb147713e124ecd445055Chris Banes @Override 5141c3dc66312394771e0cb147713e124ecd445055Chris Banes public void draw(Canvas canvas) { 5241c3dc66312394771e0cb147713e124ecd445055Chris Banes } 5341c3dc66312394771e0cb147713e124ecd445055Chris Banes 5441c3dc66312394771e0cb147713e124ecd445055Chris Banes /** 5541c3dc66312394771e0cb147713e124ecd445055Chris Banes * Compare to: {@link View#getDefaultSize(int, int)} 5641c3dc66312394771e0cb147713e124ecd445055Chris Banes * If mode is AT_MOST, return the child size instead of the parent size 5741c3dc66312394771e0cb147713e124ecd445055Chris Banes * (unless it is too big). 5841c3dc66312394771e0cb147713e124ecd445055Chris Banes */ 5941c3dc66312394771e0cb147713e124ecd445055Chris Banes private static int getDefaultSize2(int size, int measureSpec) { 6041c3dc66312394771e0cb147713e124ecd445055Chris Banes int result = size; 6141c3dc66312394771e0cb147713e124ecd445055Chris Banes int specMode = MeasureSpec.getMode(measureSpec); 6241c3dc66312394771e0cb147713e124ecd445055Chris Banes int specSize = MeasureSpec.getSize(measureSpec); 6341c3dc66312394771e0cb147713e124ecd445055Chris Banes 6441c3dc66312394771e0cb147713e124ecd445055Chris Banes switch (specMode) { 6541c3dc66312394771e0cb147713e124ecd445055Chris Banes case MeasureSpec.UNSPECIFIED: 6641c3dc66312394771e0cb147713e124ecd445055Chris Banes result = size; 6741c3dc66312394771e0cb147713e124ecd445055Chris Banes break; 6841c3dc66312394771e0cb147713e124ecd445055Chris Banes case MeasureSpec.AT_MOST: 6941c3dc66312394771e0cb147713e124ecd445055Chris Banes result = Math.min(size, specSize); 7041c3dc66312394771e0cb147713e124ecd445055Chris Banes break; 7141c3dc66312394771e0cb147713e124ecd445055Chris Banes case MeasureSpec.EXACTLY: 7241c3dc66312394771e0cb147713e124ecd445055Chris Banes result = specSize; 7341c3dc66312394771e0cb147713e124ecd445055Chris Banes break; 7441c3dc66312394771e0cb147713e124ecd445055Chris Banes } 7541c3dc66312394771e0cb147713e124ecd445055Chris Banes return result; 7641c3dc66312394771e0cb147713e124ecd445055Chris Banes } 7741c3dc66312394771e0cb147713e124ecd445055Chris Banes 7841c3dc66312394771e0cb147713e124ecd445055Chris Banes @Override 7941c3dc66312394771e0cb147713e124ecd445055Chris Banes protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 8041c3dc66312394771e0cb147713e124ecd445055Chris Banes setMeasuredDimension( 8141c3dc66312394771e0cb147713e124ecd445055Chris Banes getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec), 8241c3dc66312394771e0cb147713e124ecd445055Chris Banes getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec)); 8341c3dc66312394771e0cb147713e124ecd445055Chris Banes } 8441c3dc66312394771e0cb147713e124ecd445055Chris Banes}