diff options
author | Adam Powell <adamp@google.com> | 2014-07-19 11:57:21 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2014-07-19 11:57:21 -0700 |
commit | eb97f473fc075c91760c2b657a7014681cd6f3ce (patch) | |
tree | 7c84066125bc1039fd76f884efc6e044b4a59b46 /core/java | |
parent | 00abaa7407c16eb5711e93f8b598ea5ee4312c6a (diff) | |
download | frameworks_base-eb97f473fc075c91760c2b657a7014681cd6f3ce.zip frameworks_base-eb97f473fc075c91760c2b657a7014681cd6f3ce.tar.gz frameworks_base-eb97f473fc075c91760c2b657a7014681cd6f3ce.tar.bz2 |
Adapt ActionBar.LayoutParams to Toolbar.LayoutParams on demand
When Toolbar is acting in the role of an action bar it needs to handle
the case where app code calls setLayoutParams on a custom view with an
ActionBar.LayoutParams instance. Run the newly set LayoutParams
through the check/generate routine normally performed when adding a
child view whenever LayoutParams are set on an existing child to
correct for it.
This might not be a bad thing to generalize someday but it would make
for very confusing compatibility behavior when running code that
was written to expect it on older platform versions.
Bug 16219488
Change-Id: I568a335fe8ebbbaa666690d1f0e95f313abd2f1e
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/widget/Toolbar.java | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 712e6d0..c0d8764 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -1006,6 +1006,24 @@ public class Toolbar extends ViewGroup { super.onRestoreInstanceState(ss.getSuperState()); } + /** + * @hide + */ + @Override + protected void onSetLayoutParams(View child, ViewGroup.LayoutParams lp) { + /* + * Apps may set ActionBar.LayoutParams on their action bar custom views when + * a Toolbar is actually acting in the role of the action bar. Perform a quick + * switch with Toolbar.LayoutParams whenever this happens. This does leave open + * one potential gotcha: if an app retains the ActionBar.LayoutParams reference + * and attempts to keep making changes to it before layout those changes won't + * be reflected in the final results. + */ + if (!checkLayoutParams(lp)) { + child.setLayoutParams(generateLayoutParams(lp)); + } + } + private void measureChildConstrained(View child, int parentWidthSpec, int widthUsed, int parentHeightSpec, int heightUsed, int heightConstraint) { final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); |