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 /src/com/android/launcher3/InsettableFrameLayout.java | |
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
Diffstat (limited to 'src/com/android/launcher3/InsettableFrameLayout.java')
-rw-r--r-- | src/com/android/launcher3/InsettableFrameLayout.java | 58 |
1 files changed, 51 insertions, 7 deletions
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()); } |