diff options
author | Adam Cohen <adamcohen@google.com> | 2014-10-25 00:35:38 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-25 00:35:38 +0000 |
commit | c99d74704d6f557fd6e81939a8e026f05344757c (patch) | |
tree | 8325b61a6f4ff2e72b94e1fc0cb940143b8c9d1d | |
parent | acb3d684036a72011805b097c333be5efaef8bc4 (diff) | |
parent | be25822f7677f376f9687e6a66cfa54739c40700 (diff) | |
download | android_packages_apps_Trebuchet-c99d74704d6f557fd6e81939a8e026f05344757c.tar.gz android_packages_apps_Trebuchet-c99d74704d6f557fd6e81939a8e026f05344757c.tar.bz2 android_packages_apps_Trebuchet-c99d74704d6f557fd6e81939a8e026f05344757c.zip |
am be25822f: Add InsettableFrameLayout layout params to easily ignore insets
* commit 'be25822f7677f376f9687e6a66cfa54739c40700':
Add InsettableFrameLayout layout params to easily ignore insets
-rw-r--r-- | res/layout/launcher_overlay_example.xml | 12 | ||||
-rw-r--r-- | res/values/attrs.xml | 4 | ||||
-rw-r--r-- | res/values/styles.xml | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/InsettableFrameLayout.java | 58 |
4 files changed, 63 insertions, 13 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 b4e154336..a52bbe23f 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -145,4 +145,8 @@ <attr name="ringOutset" format="dimension" /> <attr name="indicatorSize" format="dimension" /> </declare-styleable> + + <declare-styleable name="InsettableFrameLayout_Layout"> + <attr name="layout_ignoreInsets" format="boolean" /> + </declare-styleable> </resources> diff --git a/res/values/styles.xml b/res/values/styles.xml index dae2c0212..15415c7c6 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -101,4 +101,4 @@ <item name="android:paddingLeft">8dp</item> </style> -</resources>
\ No newline at end of file +</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()); } |