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
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user