OSDN Git Service

Fix generate layout params to preserve margins
authorYigit Boyar <yboyar@google.com>
Tue, 22 Mar 2016 23:53:42 +0000 (16:53 -0700)
committerYigit Boyar <yboyar@google.com>
Wed, 23 Mar 2016 00:07:44 +0000 (17:07 -0700)
This CL fixes a common bug in framework's widgets where they
were not converting a child's margin layout params properly.

The CL fixes, FrameLayout, RelativeLayout, GridLayout and
LinearLayout.

Bug: 27785449
Change-Id: Icecd9181ff82107e412174fe152f35d32d36b2e6

core/java/android/widget/FrameLayout.java
core/java/android/widget/GridLayout.java
core/java/android/widget/LinearLayout.java
core/java/android/widget/RelativeLayout.java

index 280ff15..fe8916b 100644 (file)
@@ -400,8 +400,14 @@ public class FrameLayout extends ViewGroup {
     }
 
     @Override
-    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
+    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
+        if (lp instanceof LayoutParams) {
+            return new LayoutParams((LayoutParams) lp);
+        } else if (lp instanceof MarginLayoutParams) {
+            return new LayoutParams((MarginLayoutParams) lp);
+        } else {
+            return new LayoutParams(lp);
+        }
     }
 
     @Override
index ef6628a..726586e 100644 (file)
@@ -867,8 +867,14 @@ public class GridLayout extends ViewGroup {
     }
 
     @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
+    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
+        if (lp instanceof LayoutParams) {
+            return new LayoutParams((LayoutParams) lp);
+        } else if (lp instanceof MarginLayoutParams) {
+            return new LayoutParams((MarginLayoutParams) lp);
+        } else {
+            return new LayoutParams(lp);
+        }
     }
 
     // Draw grid
index 9e8f778..f75b74b 100644 (file)
@@ -1839,8 +1839,14 @@ public class LinearLayout extends ViewGroup {
     }
 
     @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
+    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
+        if (lp instanceof LayoutParams) {
+            return new LayoutParams((LayoutParams) lp);
+        } else if (lp instanceof MarginLayoutParams) {
+            return new LayoutParams((MarginLayoutParams) lp);
+        } else {
+            return new LayoutParams(lp);
+        }
     }
 
 
index df01fc1..0136542 100644 (file)
@@ -1103,8 +1103,14 @@ public class RelativeLayout extends ViewGroup {
     }
 
     @Override
-    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
+    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
+        if (lp instanceof LayoutParams) {
+            return new LayoutParams((LayoutParams) lp);
+        } else if (lp instanceof MarginLayoutParams) {
+            return new LayoutParams((MarginLayoutParams) lp);
+        } else {
+            return new LayoutParams(lp);
+        }
     }
 
     /** @hide */