diff options
author | Adam Cohen <adamcohen@google.com> | 2014-10-24 16:45:59 -0700 |
---|---|---|
committer | Danesh M <daneshm90@gmail.com> | 2015-09-27 18:55:56 -0700 |
commit | bb2619a2c4f53acca421f98a17f46d96b17fa68f (patch) | |
tree | 383b2dd2da994a9c0255a341ad472f9ee7cc2546 | |
parent | a853e39fe9119059ccbb8321f891172fa60ccc4b (diff) | |
download | android_packages_apps_Trebuchet-bb2619a2c4f53acca421f98a17f46d96b17fa68f.tar.gz android_packages_apps_Trebuchet-bb2619a2c4f53acca421f98a17f46d96b17fa68f.tar.bz2 android_packages_apps_Trebuchet-bb2619a2c4f53acca421f98a17f46d96b17fa68f.zip |
Add InsettableFrameLayout layout params to easily ignore insets
Change-Id: I117fc34627e24ea5f909c3c87e9c2dbca46babb6
-rw-r--r-- | res/layout/launcher_overlay_example.xml | 12 | ||||
-rw-r--r-- | res/values/attrs.xml | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/InsettableFrameLayout.java | 58 |
3 files changed, 62 insertions, 12 deletions
diff --git a/res/layout/launcher_overlay_example.xml b/res/layout/launcher_overlay_example.xml index 8735d141b..1556b6f90 100644 --- a/res/layout/launcher_overlay_example.xml +++ b/res/layout/launcher_overlay_example.xml @@ -14,19 +14,21 @@ limitations under the License. --> -<com.android.launcher3.InsettableFrameLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + launcher:layout_ignoreInsets="true"> - <com.android.launcher3.InsettableFrameLayout + <FrameLayout android:id="@+id/search_overlay" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff00ff00" android:visibility="invisible" /> - <com.android.launcher3.InsettableFrameLayout + <FrameLayout android:id="@+id/search_box" android:layout_width="match_parent" android:layout_height="48dp" @@ -34,4 +36,4 @@ android:layout_marginRight="8dp" android:layout_marginTop="36dp" android:background="#ffff0000" /> -</com.android.launcher3.InsettableFrameLayout> +</FrameLayout> diff --git a/res/values/attrs.xml b/res/values/attrs.xml index fddb1bcaf..74f942c92 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -161,4 +161,8 @@ <attr name="precision" format="float" /> <attr name="sizeToFit" format="boolean" /> </declare-styleable> + + <declare-styleable name="InsettableFrameLayout_Layout"> + <attr name="layout_ignoreInsets" format="boolean" /> + </declare-styleable> </resources> diff --git a/src/com/android/launcher3/InsettableFrameLayout.java b/src/com/android/launcher3/InsettableFrameLayout.java index 4ba9c88cd..1c3d5a189 100644 --- a/src/com/android/launcher3/InsettableFrameLayout.java +++ b/src/com/android/launcher3/InsettableFrameLayout.java @@ -1,6 +1,7 @@ package com.android.launcher3; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; @@ -18,16 +19,17 @@ public class InsettableFrameLayout extends FrameLayout implements } public void setFrameLayoutChildInsets(View child, Rect newInsets, Rect oldInsets) { - final FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) child.getLayoutParams(); + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if (child instanceof Insettable) { ((Insettable) child).setInsets(newInsets); - } else { - flp.topMargin += (newInsets.top - oldInsets.top); - flp.leftMargin += (newInsets.left - oldInsets.left); - flp.rightMargin += (newInsets.right - oldInsets.right); - flp.bottomMargin += (newInsets.bottom - oldInsets.bottom); + } else if (!lp.ignoreInsets) { + lp.topMargin += (newInsets.top - oldInsets.top); + lp.leftMargin += (newInsets.left - oldInsets.left); + lp.rightMargin += (newInsets.right - oldInsets.right); + lp.bottomMargin += (newInsets.bottom - oldInsets.bottom); } - child.setLayoutParams(flp); + child.setLayoutParams(lp); } @Override @@ -41,6 +43,48 @@ public class InsettableFrameLayout extends FrameLayout implements } @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new InsettableFrameLayout.LayoutParams(getContext(), attrs); + } + + @Override + protected LayoutParams generateDefaultLayoutParams() { + return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + } + + // Override to allow type-checking of LayoutParams. + @Override + protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { + return p instanceof InsettableFrameLayout.LayoutParams; + } + + @Override + protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { + return new LayoutParams(p); + } + + class LayoutParams extends FrameLayout.LayoutParams { + boolean ignoreInsets = false; + + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + TypedArray a = c.obtainStyledAttributes(attrs, + R.styleable.InsettableFrameLayout_Layout); + ignoreInsets = a.getBoolean( + R.styleable.InsettableFrameLayout_Layout_layout_ignoreInsets, false); + a.recycle(); + } + + public LayoutParams(int width, int height) { + super(width, height); + } + + public LayoutParams(ViewGroup.LayoutParams lp) { + super(lp); + } + } + + @Override public void onChildViewAdded(View parent, View child) { setFrameLayoutChildInsets(child, mInsets, new Rect()); } |