FrameLayout.java revision 82f3495b146b267f3786997752cef25310176349
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Rect; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Region; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 27958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackbornimport android.view.ViewDebug; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Gravity; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RemoteViews.RemoteView; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FrameLayout is designed to block out an area on the screen to display 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a single item. You can add multiple children to a FrameLayout, but all 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * children are pegged to the top left of the screen. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Children are drawn in a stack, with the most recently added child on top. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The size of the frame layout is the size of its largest child (plus padding), visible 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or not (if the FrameLayout's parent permits). Views that are GONE are used for sizing 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only if {@link #setMeasureAllChildren(boolean) setConsiderGoneChildrenWhenMeasuring()} 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is set to true. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foreground 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foregroundGravity 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_measureAllChildren 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@RemoteView 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class FrameLayout extends ViewGroup { 49958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mMeasureAllChildren = false; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 52958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Drawable mForeground; 54958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingLeft = 0; 56958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingTop = 0; 58958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingRight = 0; 60958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingBottom = 0; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Rect mSelfBounds = new Rect(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Rect mOverlayBounds = new Rect(); 65958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundGravity = Gravity.FILL; 67883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen 68883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen /** {@hide} */ 69958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn @ViewDebug.ExportedProperty 70883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen protected boolean mForegroundInPadding = true; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 72958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn boolean mForegroundBoundsChanged = false; 73958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context) { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context, AttributeSet attrs) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, attrs, 0); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context, AttributeSet attrs, int defStyle) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs, defStyle); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FrameLayout, 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project defStyle, 0); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 88105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundGravity = a.getInt( 89105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project com.android.internal.R.styleable.FrameLayout_foregroundGravity, mForegroundGravity); 90105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Drawable d = a.getDrawable(com.android.internal.R.styleable.FrameLayout_foreground); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d != null) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setForeground(d); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a.getBoolean(com.android.internal.R.styleable.FrameLayout_measureAllChildren, false)) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMeasureAllChildren(true); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 100105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundInPadding = a.getBoolean( 101105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project com.android.internal.R.styleable.FrameLayout_foregroundInsidePadding, true); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes how the foreground is positioned. Defaults to FILL. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param foregroundGravity See {@link android.view.Gravity} 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foregroundGravity 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @android.view.RemotableViewMethod 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setForegroundGravity(int foregroundGravity) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForegroundGravity != foregroundGravity) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((foregroundGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project foregroundGravity |= Gravity.LEFT; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project foregroundGravity |= Gravity.TOP; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundGravity = foregroundGravity; 125105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 126105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 127105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForegroundGravity == Gravity.FILL && mForeground != null) { 128105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Rect padding = new Rect(); 129105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForeground.getPadding(padding)) { 130105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = padding.left; 131105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = padding.top; 132105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = padding.right; 133105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = padding.bottom; 134105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 135105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else { 136105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = 0; 137105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = 0; 138105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = 0; 139105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = 0; 140105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 141105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestLayout(); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean verifyDrawable(Drawable who) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.verifyDrawable(who) || (who == mForeground); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void drawableStateChanged() { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.drawableStateChanged(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null && mForeground.isStateful()) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground.setState(getDrawableState()); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a set of layout parameters with a width of 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.ViewGroup.LayoutParams#FILL_PARENT}, 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and a height of {@link android.view.ViewGroup.LayoutParams#FILL_PARENT}. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected LayoutParams generateDefaultLayoutParams() { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Supply a Drawable that is to be rendered on top of all of the child 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views in the frame layout. Any padding in the Drawable will be taken 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into account by ensuring that the children are inset to be placed 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the padding area. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param drawable The Drawable to be drawn on top of the children. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foreground 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setForeground(Drawable drawable) { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != drawable) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground.setCallback(null); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unscheduleDrawable(mForeground); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground = drawable; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingLeft = 0; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingTop = 0; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingRight = 0; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingBottom = 0; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable != null) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setWillNotDraw(false); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawable.setCallback(this); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable.isStateful()) { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawable.setState(getDrawableState()); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 204105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForegroundGravity == Gravity.FILL) { 205105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Rect padding = new Rect(); 206105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (drawable.getPadding(padding)) { 207105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = padding.left; 208105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = padding.top; 209105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = padding.right; 210105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = padding.bottom; 211105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setWillNotDraw(true); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestLayout(); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project invalidate(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the drawable used as the foreground of this FrameLayout. The 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground drawable, if non-null, is always drawn on top of the children. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Drawable or null if no foreground was set. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable getForeground() { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mForeground; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = getChildCount(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxHeight = 0; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxWidth = 0; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Find rightmost and bottommost child 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View child = getChildAt(i); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMeasureAllChildren || child.getVisibility() != GONE) { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth = Math.max(maxWidth, child.getMeasuredWidth()); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight = Math.max(maxHeight, child.getMeasuredHeight()); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Account for padding too 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth += mPaddingLeft + mPaddingRight + mForegroundPaddingLeft + mForegroundPaddingRight; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight += mPaddingTop + mPaddingBottom + mForegroundPaddingTop + mForegroundPaddingBottom; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check against our minimum height and width 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight()); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth()); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check against our foreground's minimum height and width 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Drawable drawable = getForeground(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable != null) { 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight = Math.max(maxHeight, drawable.getMinimumHeight()); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth = Math.max(maxWidth, drawable.getMinimumWidth()); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec), 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolveSize(maxHeight, heightMeasureSpec)); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = getChildCount(); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int parentLeft = mPaddingLeft + mForegroundPaddingLeft; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int parentRight = right - left - mPaddingRight - mForegroundPaddingRight; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int parentTop = mPaddingTop + mForegroundPaddingTop; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int parentBottom = bottom - top - mPaddingBottom - mForegroundPaddingBottom; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 283958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = true; 284958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View child = getChildAt(i); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (child.getVisibility() != GONE) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LayoutParams lp = (LayoutParams) child.getLayoutParams(); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int width = child.getMeasuredWidth(); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int height = child.getMeasuredHeight(); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int childLeft = parentLeft; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int childTop = parentTop; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int gravity = lp.gravity; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gravity != -1) { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int horizontalGravity = gravity & Gravity.HORIZONTAL_GRAVITY_MASK; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK; 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (horizontalGravity) { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.LEFT: 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childLeft = parentLeft + lp.leftMargin; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.CENTER_HORIZONTAL: 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childLeft = parentLeft + (parentRight - parentLeft + lp.leftMargin + 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lp.rightMargin - width) / 2; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.RIGHT: 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childLeft = parentRight - width - lp.rightMargin; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childLeft = parentLeft + lp.leftMargin; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (verticalGravity) { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.TOP: 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childTop = parentTop + lp.topMargin; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.CENTER_VERTICAL: 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childTop = parentTop + (parentBottom - parentTop + lp.topMargin + 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lp.bottomMargin - height) / 2; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Gravity.BOTTOM: 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childTop = parentBottom - height - lp.bottomMargin; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childTop = parentTop + lp.topMargin; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project child.layout(childLeft, childTop, childLeft + width, childTop + height); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSizeChanged(int w, int h, int oldw, int oldh) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onSizeChanged(w, h, oldw, oldh); 344958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = true; 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas) { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.draw(canvas); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null) { 355958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn final Drawable foreground = mForeground; 35682f3495b146b267f3786997752cef25310176349Romain Guy 357958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn if (mForegroundBoundsChanged) { 358958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = false; 35982f3495b146b267f3786997752cef25310176349Romain Guy final Rect selfBounds = mSelfBounds; 36082f3495b146b267f3786997752cef25310176349Romain Guy final Rect overlayBounds = mOverlayBounds; 361958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 36282f3495b146b267f3786997752cef25310176349Romain Guy final int w = mRight-mLeft; 36382f3495b146b267f3786997752cef25310176349Romain Guy final int h = mBottom-mTop; 36482f3495b146b267f3786997752cef25310176349Romain Guy 36582f3495b146b267f3786997752cef25310176349Romain Guy if (mForegroundInPadding) { 36682f3495b146b267f3786997752cef25310176349Romain Guy selfBounds.set(0, 0, w, h); 36782f3495b146b267f3786997752cef25310176349Romain Guy } else { 36882f3495b146b267f3786997752cef25310176349Romain Guy selfBounds.set(mPaddingLeft, mPaddingTop, w - mPaddingRight, h - mPaddingBottom); 369958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn } 37082f3495b146b267f3786997752cef25310176349Romain Guy 37182f3495b146b267f3786997752cef25310176349Romain Guy Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(), 37282f3495b146b267f3786997752cef25310176349Romain Guy foreground.getIntrinsicHeight(), selfBounds, overlayBounds); 37382f3495b146b267f3786997752cef25310176349Romain Guy foreground.setBounds(overlayBounds); 374958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn } 375958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 376958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn foreground.draw(canvas); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean gatherTransparentRegion(Region region) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean opaque = super.gatherTransparentRegion(region); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (region != null && mForeground != null) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applyDrawableToTransparentRegion(mForeground, region); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return opaque; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Determines whether to measure all children or just those in 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the VISIBLE or INVISIBLE state when measuring. Defaults to false. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measureAll true to consider children marked GONE, false otherwise. 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default value is false. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_measureAllChildren 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @android.view.RemotableViewMethod 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setMeasureAllChildren(boolean measureAll) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMeasureAllChildren = measureAll; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Determines whether to measure all children or just those in 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the VISIBLE or INVISIBLE state when measuring. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getConsiderGoneChildrenWhenMeasuring() { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMeasureAllChildren; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams generateLayoutParams(AttributeSet attrs) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new FrameLayout.LayoutParams(getContext(), attrs); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return p instanceof LayoutParams; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LayoutParams(p); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Per-child layout information for layouts that support margins. 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link android.R.styleable#FrameLayout_Layout FrameLayout Layout Attributes} 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a list of all child view attributes that this class supports. 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class LayoutParams extends MarginLayoutParams { 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The gravity to apply with the View to which these layout parameters 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are associated. 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Gravity 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int gravity = -1; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(Context c, AttributeSet attrs) { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(c, attrs); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = c.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FrameLayout_Layout); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gravity = a.getInt(com.android.internal.R.styleable.FrameLayout_Layout_layout_gravity, -1); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(int width, int height) { 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(width, height); 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a new set of layout parameters with the specified width, height 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and weight. 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param width the width, either {@link #FILL_PARENT}, 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #WRAP_CONTENT} or a fixed size in pixels 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param height the height, either {@link #FILL_PARENT}, 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #WRAP_CONTENT} or a fixed size in pixels 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gravity the gravity 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Gravity 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(int width, int height, int gravity) { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(width, height); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.gravity = gravity; 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(ViewGroup.LayoutParams source) { 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(ViewGroup.MarginLayoutParams source) { 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499