FrameLayout.java revision aac0d4ed026d1cfbcf3fa81c6e4eb96f4347ca17
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 19de35ceeeb9f8855c72dfd70593e917aa75b43770Fabrice Di Meglioimport java.util.ArrayList; 20de35ceeeb9f8855c72dfd70593e917aa75b43770Fabrice Di Meglio 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Rect; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Region; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 28de35ceeeb9f8855c72dfd70593e917aa75b43770Fabrice Di Meglioimport android.view.Gravity; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 30958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackbornimport android.view.ViewDebug; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 328a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganovimport android.view.accessibility.AccessibilityEvent; 338a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganovimport android.view.accessibility.AccessibilityNodeInfo; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RemoteViews.RemoteView; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FrameLayout is designed to block out an area on the screen to display 39812634c236b83e100c8473d607e44f8d8c48e805Scott Main * a single item. Generally, FrameLayout should be used to hold a single child view, because it can 40812634c236b83e100c8473d607e44f8d8c48e805Scott Main * be difficult to organize child views in a way that's scalable to different screen sizes without 41812634c236b83e100c8473d607e44f8d8c48e805Scott Main * the children overlapping each other. You can, however, add multiple children to a FrameLayout 42812634c236b83e100c8473d607e44f8d8c48e805Scott Main * and control their position within the FrameLayout by assigning gravity to each child, using the 43812634c236b83e100c8473d607e44f8d8c48e805Scott Main * <a href="FrameLayout.LayoutParams.html#attr_android:layout_gravity">{@code 44812634c236b83e100c8473d607e44f8d8c48e805Scott Main * android:layout_gravity}</a> attribute. 45812634c236b83e100c8473d607e44f8d8c48e805Scott Main * <p>Child views are drawn in a stack, with the most recently added child on top. 46812634c236b83e100c8473d607e44f8d8c48e805Scott Main * The size of the FrameLayout is the size of its largest child (plus padding), visible 47812634c236b83e100c8473d607e44f8d8c48e805Scott Main * or not (if the FrameLayout's parent permits). Views that are {@link android.view.View#GONE} are 48812634c236b83e100c8473d607e44f8d8c48e805Scott Main * used for sizing 49812634c236b83e100c8473d607e44f8d8c48e805Scott Main * only if {@link #setMeasureAllChildren(boolean) setConsiderGoneChildrenWhenMeasuring()} 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is set to true. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foreground 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foregroundGravity 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_measureAllChildren 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@RemoteView 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class FrameLayout extends ViewGroup { 58aac0d4ed026d1cfbcf3fa81c6e4eb96f4347ca17Fabrice Di Meglio private static final int DEFAULT_CHILD_GRAVITY = Gravity.TOP | Gravity.START; 599c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 60bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "measurement") 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mMeasureAllChildren = false; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 63bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "drawing") 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Drawable mForeground; 65bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev 66bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "padding") 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingLeft = 0; 68bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev 69bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "padding") 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingTop = 0; 71bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev 72bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "padding") 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingRight = 0; 74bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev 75bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "padding") 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundPaddingBottom = 0; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Rect mSelfBounds = new Rect(); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Rect mOverlayBounds = new Rect(); 80bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev 81bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "drawing") 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mForegroundGravity = Gravity.FILL; 83883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen 84883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen /** {@hide} */ 85bea95162ca25bd00b0479d93739b6283795c3986Konstantin Lopyrev @ViewDebug.ExportedProperty(category = "drawing") 86883e7eb389d55866f329150f258a70104abb10d7Karl Rosaen protected boolean mForegroundInPadding = true; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 88958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn boolean mForegroundBoundsChanged = false; 89958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 909c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy private final ArrayList<View> mMatchParentChildren = new ArrayList<View>(1); 919c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context, AttributeSet attrs) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, attrs, 0); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FrameLayout(Context context, AttributeSet attrs, int defStyle) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs, defStyle); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FrameLayout, 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project defStyle, 0); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 106105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundGravity = a.getInt( 107105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project com.android.internal.R.styleable.FrameLayout_foregroundGravity, mForegroundGravity); 108105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Drawable d = a.getDrawable(com.android.internal.R.styleable.FrameLayout_foreground); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d != null) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setForeground(d); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a.getBoolean(com.android.internal.R.styleable.FrameLayout_measureAllChildren, false)) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMeasureAllChildren(true); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 118105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundInPadding = a.getBoolean( 119105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project com.android.internal.R.styleable.FrameLayout_foregroundInsidePadding, true); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1251018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * Describes how the foreground is positioned. 1261018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * 1271018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * @return foreground gravity. 1281018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * 1291018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * @see #setForegroundGravity(int) 1301018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * 1311018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * @attr ref android.R.styleable#FrameLayout_foregroundGravity 1321018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne */ 1331018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne public int getForegroundGravity() { 1341018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne return mForegroundGravity; 1351018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne } 1361018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne 1371018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne /** 1389e3b002d3f9141d54948a65e0330fdcd09e75a30Fabrice Di Meglio * Describes how the foreground is positioned. Defaults to START and TOP. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param foregroundGravity See {@link android.view.Gravity} 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1421018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * @see #getForegroundGravity() 1431018fb42cb4958511a141787705aa429c5ec9bd3Philip Milne * 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foregroundGravity 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @android.view.RemotableViewMethod 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setForegroundGravity(int foregroundGravity) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForegroundGravity != foregroundGravity) { 1496a03640539405afbdefe72894759281b98aa6e6fFabrice Di Meglio if ((foregroundGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) { 1509e3b002d3f9141d54948a65e0330fdcd09e75a30Fabrice Di Meglio foregroundGravity |= Gravity.START; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project foregroundGravity |= Gravity.TOP; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundGravity = foregroundGravity; 158105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 159105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 160105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForegroundGravity == Gravity.FILL && mForeground != null) { 161105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Rect padding = new Rect(); 162105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForeground.getPadding(padding)) { 163105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = padding.left; 164105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = padding.top; 165105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = padding.right; 166105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = padding.bottom; 167105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 168105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else { 169105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = 0; 170105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = 0; 171105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = 0; 172105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = 0; 173105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 174105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestLayout(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean verifyDrawable(Drawable who) { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.verifyDrawable(who) || (who == mForeground); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 187e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn @Override 188e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn public void jumpDrawablesToCurrentState() { 189e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn super.jumpDrawablesToCurrentState(); 190e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn if (mForeground != null) mForeground.jumpToCurrentState(); 191e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn } 192e213677037f836529efcc0ac201fc61dd95481c5Dianne Hackborn 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void drawableStateChanged() { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.drawableStateChanged(); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null && mForeground.isStateful()) { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground.setState(getDrawableState()); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a set of layout parameters with a width of 206980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * {@link android.view.ViewGroup.LayoutParams#MATCH_PARENT}, 207980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * and a height of {@link android.view.ViewGroup.LayoutParams#MATCH_PARENT}. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected LayoutParams generateDefaultLayoutParams() { 211980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Supply a Drawable that is to be rendered on top of all of the child 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views in the frame layout. Any padding in the Drawable will be taken 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into account by ensuring that the children are inset to be placed 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the padding area. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param drawable The Drawable to be drawn on top of the children. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_foreground 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setForeground(Drawable drawable) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != drawable) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null) { 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground.setCallback(null); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unscheduleDrawable(mForeground); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForeground = drawable; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingLeft = 0; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingTop = 0; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingRight = 0; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mForegroundPaddingBottom = 0; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable != null) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setWillNotDraw(false); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawable.setCallback(this); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable.isStateful()) { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawable.setState(getDrawableState()); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 243105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (mForegroundGravity == Gravity.FILL) { 244105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Rect padding = new Rect(); 245105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (drawable.getPadding(padding)) { 246105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingLeft = padding.left; 247105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingTop = padding.top; 248105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingRight = padding.right; 249105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mForegroundPaddingBottom = padding.bottom; 250105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setWillNotDraw(true); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestLayout(); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project invalidate(); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the drawable used as the foreground of this FrameLayout. The 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground drawable, if non-null, is always drawn on top of the children. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Drawable or null if no foreground was set. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable getForeground() { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mForeground; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27002473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka private int getPaddingLeftWithForeground() { 27102473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka return mForegroundInPadding ? Math.max(mPaddingLeft, mForegroundPaddingLeft) : 27202473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka mPaddingLeft + mForegroundPaddingLeft; 27302473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka } 27402473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka 27502473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka private int getPaddingRightWithForeground() { 27602473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka return mForegroundInPadding ? Math.max(mPaddingRight, mForegroundPaddingRight) : 27702473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka mPaddingRight + mForegroundPaddingRight; 27802473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka } 27902473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka 28002473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka private int getPaddingTopWithForeground() { 28102473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka return mForegroundInPadding ? Math.max(mPaddingTop, mForegroundPaddingTop) : 28202473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka mPaddingTop + mForegroundPaddingTop; 28302473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka } 28402473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka 28502473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka private int getPaddingBottomWithForeground() { 28602473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka return mForegroundInPadding ? Math.max(mPaddingBottom, mForegroundPaddingBottom) : 28702473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka mPaddingBottom + mForegroundPaddingBottom; 28802473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka } 28902473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka 29002473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 2969c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy int count = getChildCount(); 2979c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 2989c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy final boolean measureMatchParentChildren = 2999c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY || 3009c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY; 3019c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy mMatchParentChildren.clear(); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxHeight = 0; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxWidth = 0; 305189ee18d6c6483ad63cc864267328259e2e00b95Dianne Hackborn int childState = 0; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View child = getChildAt(i); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMeasureAllChildren || child.getVisibility() != GONE) { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0); 3112b6be701a90a4f0aefefcf8e70feb04722e1bcfeAdam Powell final LayoutParams lp = (LayoutParams) child.getLayoutParams(); 3122b6be701a90a4f0aefefcf8e70feb04722e1bcfeAdam Powell maxWidth = Math.max(maxWidth, 3132b6be701a90a4f0aefefcf8e70feb04722e1bcfeAdam Powell child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin); 3142b6be701a90a4f0aefefcf8e70feb04722e1bcfeAdam Powell maxHeight = Math.max(maxHeight, 3152b6be701a90a4f0aefefcf8e70feb04722e1bcfeAdam Powell child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin); 316189ee18d6c6483ad63cc864267328259e2e00b95Dianne Hackborn childState = combineMeasuredStates(childState, child.getMeasuredState()); 3179c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy if (measureMatchParentChildren) { 3189c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy if (lp.width == LayoutParams.MATCH_PARENT || 3199c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy lp.height == LayoutParams.MATCH_PARENT) { 3209c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy mMatchParentChildren.add(child); 3219c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3229c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Account for padding too 32702473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka maxWidth += getPaddingLeftWithForeground() + getPaddingRightWithForeground(); 32802473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka maxHeight += getPaddingTopWithForeground() + getPaddingBottomWithForeground(); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check against our minimum height and width 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight()); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth()); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check against our foreground's minimum height and width 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Drawable drawable = getForeground(); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (drawable != null) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxHeight = Math.max(maxHeight, drawable.getMinimumHeight()); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maxWidth = Math.max(maxWidth, drawable.getMinimumWidth()); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 341189ee18d6c6483ad63cc864267328259e2e00b95Dianne Hackborn setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, childState), 342189ee18d6c6483ad63cc864267328259e2e00b95Dianne Hackborn resolveSizeAndState(maxHeight, heightMeasureSpec, 3439c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy childState << MEASURED_HEIGHT_STATE_SHIFT)); 3449c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 345a174d7a0d5475dbae2b48f7359abf1637a882896Romain Guy count = mMatchParentChildren.size(); 346a174d7a0d5475dbae2b48f7359abf1637a882896Romain Guy if (count > 1) { 3479c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy for (int i = 0; i < count; i++) { 3489c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy final View child = mMatchParentChildren.get(i); 3499c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 3509c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); 3519c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy int childWidthMeasureSpec; 3529c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy int childHeightMeasureSpec; 353a174d7a0d5475dbae2b48f7359abf1637a882896Romain Guy 3549c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy if (lp.width == LayoutParams.MATCH_PARENT) { 3559c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(getMeasuredWidth() - 35602473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka getPaddingLeftWithForeground() - getPaddingRightWithForeground() - 35702473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka lp.leftMargin - lp.rightMargin, 3589c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy MeasureSpec.EXACTLY); 3599c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } else { 3609c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 36102473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka getPaddingLeftWithForeground() + getPaddingRightWithForeground() + 36202473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka lp.leftMargin + lp.rightMargin, 3639c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy lp.width); 3649c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3659c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 3669c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy if (lp.height == LayoutParams.MATCH_PARENT) { 3679c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(getMeasuredHeight() - 36802473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka getPaddingTopWithForeground() - getPaddingBottomWithForeground() - 36902473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka lp.topMargin - lp.bottomMargin, 3709c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy MeasureSpec.EXACTLY); 3719c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } else { 372cf70dcb0f76d1175f1d3c31da1c827eb443a323aRomain Guy childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, 37302473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka getPaddingTopWithForeground() + getPaddingBottomWithForeground() + 37402473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka lp.topMargin + lp.bottomMargin, 3759c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy lp.height); 3769c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3779c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy 3789c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy child.measure(childWidthMeasureSpec, childHeightMeasureSpec); 3799c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3809c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = getChildCount(); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39002473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka final int parentLeft = getPaddingLeftWithForeground(); 39102473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka final int parentRight = right - left - getPaddingRightWithForeground(); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39302473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka final int parentTop = getPaddingTopWithForeground(); 39402473da2b0a99d886d0dbcf5fba5619047855111Michael Jurka final int parentBottom = bottom - top - getPaddingBottomWithForeground(); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 396958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = true; 397958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final View child = getChildAt(i); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (child.getVisibility() != GONE) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LayoutParams lp = (LayoutParams) child.getLayoutParams(); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int width = child.getMeasuredWidth(); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int height = child.getMeasuredHeight(); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4069c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy int childLeft; 4079c9573721140c260d4614c7ac58923dcfa0cea22Romain Guy int childTop; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4095e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell int gravity = lp.gravity; 4105e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell if (gravity == -1) { 4115e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell gravity = DEFAULT_CHILD_GRAVITY; 4125e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell } 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 414c0053223bedf33581b0830fb87be32c1f26e5372Fabrice Di Meglio final int layoutDirection = getResolvedLayoutDirection(); 415c0053223bedf33581b0830fb87be32c1f26e5372Fabrice Di Meglio final int absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection); 4165e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK; 4175e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell 418de35ceeeb9f8855c72dfd70593e917aa75b43770Fabrice Di Meglio switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { 4195e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.LEFT: 4205e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childLeft = parentLeft + lp.leftMargin; 4215e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4225e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.CENTER_HORIZONTAL: 4235e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childLeft = parentLeft + (parentRight - parentLeft - width) / 2 + 4245e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell lp.leftMargin - lp.rightMargin; 4255e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4265e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.RIGHT: 4275e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childLeft = parentRight - width - lp.rightMargin; 4285e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4295e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell default: 4305e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childLeft = parentLeft + lp.leftMargin; 4315e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell } 4325e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell 4335e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell switch (verticalGravity) { 4345e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.TOP: 4355e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childTop = parentTop + lp.topMargin; 4365e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4375e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.CENTER_VERTICAL: 4385e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childTop = parentTop + (parentBottom - parentTop - height) / 2 + 4395e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell lp.topMargin - lp.bottomMargin; 4405e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4415e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell case Gravity.BOTTOM: 4425e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childTop = parentBottom - height - lp.bottomMargin; 4435e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell break; 4445e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell default: 4455e0ae6765619724f58f4da631e5f40b24b69c089Adam Powell childTop = parentTop + lp.topMargin; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project child.layout(childLeft, childTop, childLeft + width, childTop + height); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSizeChanged(int w, int h, int oldw, int oldh) { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onSizeChanged(w, h, oldw, oldh); 459958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = true; 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.draw(canvas); 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mForeground != null) { 470958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn final Drawable foreground = mForeground; 47182f3495b146b267f3786997752cef25310176349Romain Guy 472958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn if (mForegroundBoundsChanged) { 473958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn mForegroundBoundsChanged = false; 47482f3495b146b267f3786997752cef25310176349Romain Guy final Rect selfBounds = mSelfBounds; 47582f3495b146b267f3786997752cef25310176349Romain Guy final Rect overlayBounds = mOverlayBounds; 476958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 47782f3495b146b267f3786997752cef25310176349Romain Guy final int w = mRight-mLeft; 47882f3495b146b267f3786997752cef25310176349Romain Guy final int h = mBottom-mTop; 47982f3495b146b267f3786997752cef25310176349Romain Guy 48082f3495b146b267f3786997752cef25310176349Romain Guy if (mForegroundInPadding) { 48182f3495b146b267f3786997752cef25310176349Romain Guy selfBounds.set(0, 0, w, h); 48282f3495b146b267f3786997752cef25310176349Romain Guy } else { 48382f3495b146b267f3786997752cef25310176349Romain Guy selfBounds.set(mPaddingLeft, mPaddingTop, w - mPaddingRight, h - mPaddingBottom); 484958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn } 48582f3495b146b267f3786997752cef25310176349Romain Guy 486c0053223bedf33581b0830fb87be32c1f26e5372Fabrice Di Meglio final int layoutDirection = getResolvedLayoutDirection(); 48782f3495b146b267f3786997752cef25310176349Romain Guy Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(), 488c0053223bedf33581b0830fb87be32c1f26e5372Fabrice Di Meglio foreground.getIntrinsicHeight(), selfBounds, overlayBounds, 489c0053223bedf33581b0830fb87be32c1f26e5372Fabrice Di Meglio layoutDirection); 49082f3495b146b267f3786997752cef25310176349Romain Guy foreground.setBounds(overlayBounds); 491958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn } 492958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn 493958b9adc086f126dcd757d29f0d7f443ae9064b2Dianne Hackborn foreground.draw(canvas); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean gatherTransparentRegion(Region region) { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean opaque = super.gatherTransparentRegion(region); 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (region != null && mForeground != null) { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applyDrawableToTransparentRegion(mForeground, region); 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return opaque; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 510b25825a1b159a469f80423800daa7f5b6250acceSteve Block * Sets whether to consider all children, or just those in 511b25825a1b159a469f80423800daa7f5b6250acceSteve Block * the VISIBLE or INVISIBLE state, when measuring. Defaults to false. 512b25825a1b159a469f80423800daa7f5b6250acceSteve Block * 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measureAll true to consider children marked GONE, false otherwise. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default value is false. 515b25825a1b159a469f80423800daa7f5b6250acceSteve Block * 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#FrameLayout_measureAllChildren 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @android.view.RemotableViewMethod 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setMeasureAllChildren(boolean measureAll) { 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMeasureAllChildren = measureAll; 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 522b25825a1b159a469f80423800daa7f5b6250acceSteve Block 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 524b25825a1b159a469f80423800daa7f5b6250acceSteve Block * Determines whether all children, or just those in the VISIBLE or 525b25825a1b159a469f80423800daa7f5b6250acceSteve Block * INVISIBLE state, are considered when measuring. 526b25825a1b159a469f80423800daa7f5b6250acceSteve Block * 527b25825a1b159a469f80423800daa7f5b6250acceSteve Block * @return Whether all children are considered when measuring. 528b25825a1b159a469f80423800daa7f5b6250acceSteve Block * 529b25825a1b159a469f80423800daa7f5b6250acceSteve Block * @deprecated This method is deprecated in favor of 530b25825a1b159a469f80423800daa7f5b6250acceSteve Block * {@link #getMeasureAllChildren() getMeasureAllChildren()}, which was 531b25825a1b159a469f80423800daa7f5b6250acceSteve Block * renamed for consistency with 532b25825a1b159a469f80423800daa7f5b6250acceSteve Block * {@link #setMeasureAllChildren(boolean) setMeasureAllChildren()}. 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 534b25825a1b159a469f80423800daa7f5b6250acceSteve Block @Deprecated 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getConsiderGoneChildrenWhenMeasuring() { 536b25825a1b159a469f80423800daa7f5b6250acceSteve Block return getMeasureAllChildren(); 537b25825a1b159a469f80423800daa7f5b6250acceSteve Block } 538b25825a1b159a469f80423800daa7f5b6250acceSteve Block 539b25825a1b159a469f80423800daa7f5b6250acceSteve Block /** 540b25825a1b159a469f80423800daa7f5b6250acceSteve Block * Determines whether all children, or just those in the VISIBLE or 541b25825a1b159a469f80423800daa7f5b6250acceSteve Block * INVISIBLE state, are considered when measuring. 542b25825a1b159a469f80423800daa7f5b6250acceSteve Block * 543b25825a1b159a469f80423800daa7f5b6250acceSteve Block * @return Whether all children are considered when measuring. 544b25825a1b159a469f80423800daa7f5b6250acceSteve Block */ 545b25825a1b159a469f80423800daa7f5b6250acceSteve Block public boolean getMeasureAllChildren() { 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMeasureAllChildren; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams generateLayoutParams(AttributeSet attrs) { 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new FrameLayout.LayoutParams(getContext(), attrs); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 557e0a799a2ac1ca78e30fbac9e4e12a063425c08d3Patrick Dubroy @Override 558e0a799a2ac1ca78e30fbac9e4e12a063425c08d3Patrick Dubroy public boolean shouldDelayChildPressedState() { 559e0a799a2ac1ca78e30fbac9e4e12a063425c08d3Patrick Dubroy return false; 560e0a799a2ac1ca78e30fbac9e4e12a063425c08d3Patrick Dubroy } 561e0a799a2ac1ca78e30fbac9e4e12a063425c08d3Patrick Dubroy 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return p instanceof LayoutParams; 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LayoutParams(p); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5758a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 5768a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov @Override 5778a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 5788a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov super.onInitializeAccessibilityEvent(event); 5798a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov event.setClassName(FrameLayout.class.getName()); 5808a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov } 5818a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 5828a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov @Override 5838a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 5848a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov super.onInitializeAccessibilityNodeInfo(info); 5858a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov info.setClassName(FrameLayout.class.getName()); 5868a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov } 5878a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Per-child layout information for layouts that support margins. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link android.R.styleable#FrameLayout_Layout FrameLayout Layout Attributes} 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a list of all child view attributes that this class supports. 592606e8cca6ac0e9a65a1a92003511b7c66d9ea439Romain Guy * 593606e8cca6ac0e9a65a1a92003511b7c66d9ea439Romain Guy * @attr ref android.R.styleable#FrameLayout_Layout_layout_gravity 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class LayoutParams extends MarginLayoutParams { 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The gravity to apply with the View to which these layout parameters 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are associated. 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Gravity 601606e8cca6ac0e9a65a1a92003511b7c66d9ea439Romain Guy * 602606e8cca6ac0e9a65a1a92003511b7c66d9ea439Romain Guy * @attr ref android.R.styleable#FrameLayout_Layout_layout_gravity 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int gravity = -1; 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 606c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne @Override 607c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) { 608c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne width = a.getLayoutDimension(widthAttr, MATCH_PARENT); 609c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne height = a.getLayoutDimension(heightAttr, MATCH_PARENT); 610c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne } 611c29f031598811486d83f418fd08fbfe1fc41788aPhilip Milne 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(Context c, AttributeSet attrs) { 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(c, attrs); 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = c.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FrameLayout_Layout); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gravity = a.getInt(com.android.internal.R.styleable.FrameLayout_Layout_layout_gravity, -1); 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(int width, int height) { 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(width, height); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a new set of layout parameters with the specified width, height 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and weight. 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 634980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * @param width the width, either {@link #MATCH_PARENT}, 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #WRAP_CONTENT} or a fixed size in pixels 636980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * @param height the height, either {@link #MATCH_PARENT}, 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #WRAP_CONTENT} or a fixed size in pixels 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gravity the gravity 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Gravity 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(int width, int height, int gravity) { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(width, height); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.gravity = gravity; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(ViewGroup.LayoutParams source) { 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutParams(ViewGroup.MarginLayoutParams source) { 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(source); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 662