diff options
| author | 2015-04-30 12:33:54 -0700 | |
|---|---|---|
| committer | 2015-04-30 12:33:54 -0700 | |
| commit | 84aa2fb65ab1ac99d6e59bd9d3398cfabc8cccc1 (patch) | |
| tree | 7880e2c95e4b7b7cc6ccca3f718fa4b72c032b7a | |
| parent | 8310f87d96791e8b864df5e821fe65273c2dd874 (diff) | |
LayoutInflater should always try to generate LayoutParams for include
A recent optimization assumed that layout_width and layout_height always
had to be defined to successfully generate layout params, but this is not
guaranteed to be true for custom ViewGroups.
Bug: 20267738
Change-Id: If09d346f30c0848b984b9137088f8f3b7617cd08
| -rw-r--r-- | core/java/android/view/LayoutInflater.java | 28 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 5 |
2 files changed, 14 insertions, 19 deletions
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java index 457d6ad1addd..1503728fbb0e 100644 --- a/core/java/android/view/LayoutInflater.java +++ b/core/java/android/view/LayoutInflater.java @@ -946,25 +946,21 @@ public abstract class LayoutInflater { attrs, R.styleable.Include); final int id = a.getResourceId(R.styleable.Include_id, View.NO_ID); final int visibility = a.getInt(R.styleable.Include_visibility, -1); - final boolean hasWidth = a.hasValue(R.styleable.Include_layout_width); - final boolean hasHeight = a.hasValue(R.styleable.Include_layout_height); a.recycle(); - // We try to load the layout params set in the <include /> tag. If - // they don't exist, we will rely on the layout params set in the - // included XML file. - // During a layoutparams generation, a runtime exception is thrown - // if either layout_width or layout_height is missing. We catch - // this exception and set localParams accordingly: true means we - // successfully loaded layout params from the <include /> tag, - // false means we need to rely on the included layout params. + // We try to load the layout params set in the <include /> tag. + // If the parent can't generate layout params (ex. missing width + // or height for the framework ViewGroups, though this is not + // necessarily true of all ViewGroups) then we expect it to throw + // a runtime exception. + // We catch this exception and set localParams accordingly: true + // means we successfully loaded layout params from the <include> + // tag, false means we need to rely on the included layout params. ViewGroup.LayoutParams params = null; - if (hasWidth && hasHeight) { - try { - params = group.generateLayoutParams(attrs); - } catch (RuntimeException e) { - // Ignore, just fail over to child attrs. - } + try { + params = group.generateLayoutParams(attrs); + } catch (RuntimeException e) { + // Ignore, just fail over to child attrs. } if (params == null) { params = group.generateLayoutParams(childAttrs); diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index e993ceb75127..2ca2062ae1db 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2722,12 +2722,11 @@ <attr name="value" /> </declare-styleable> - <!-- Attributes that can be assigned to an <include> tag. --> + <!-- Attributes that can be assigned to an <include> tag. + @hide --> <declare-styleable name="Include"> <attr name="id" /> <attr name="visibility" /> - <attr name="layout_width" /> - <attr name="layout_height" /> </declare-styleable> <!-- Attributes that can be used with a {@link android.view.ViewGroup} or any |