Allow the use of styles with LinearLayout, make "useLargestChild" attr public.

Change-Id: I044f3f5bd9b90c684ded7a37ff85e3aa8d15af96
This commit is contained in:
Romain Guy
2010-06-15 11:33:24 -07:00
parent 7e28c0108b
commit 9295ada0ec
6 changed files with 103 additions and 16 deletions

View File

@@ -379,7 +379,7 @@ public abstract class LayoutInflater {
+ "ViewGroup root and attachToRoot=true");
}
rInflate(parser, root, attrs);
rInflate(parser, root, attrs, false);
} else {
// Temp is the root view that was found in the xml
View temp = createViewFromTag(name, attrs);
@@ -404,7 +404,7 @@ public abstract class LayoutInflater {
System.out.println("-----> start inflating children");
}
// Inflate all children under temp
rInflate(parser, temp, attrs);
rInflate(parser, temp, attrs, true);
if (DEBUG) {
System.out.println("-----> done inflating children");
}
@@ -590,8 +590,8 @@ public abstract class LayoutInflater {
* Recursive method used to descend down the xml hierarchy and instantiate
* views, instantiate their children, and then call onFinishInflate().
*/
private void rInflate(XmlPullParser parser, View parent, final AttributeSet attrs)
throws XmlPullParserException, IOException {
private void rInflate(XmlPullParser parser, View parent, final AttributeSet attrs,
boolean finishInflate) throws XmlPullParserException, IOException {
final int depth = parser.getDepth();
int type;
@@ -618,12 +618,12 @@ public abstract class LayoutInflater {
final View view = createViewFromTag(name, attrs);
final ViewGroup viewGroup = (ViewGroup) parent;
final ViewGroup.LayoutParams params = viewGroup.generateLayoutParams(attrs);
rInflate(parser, view, attrs);
rInflate(parser, view, attrs, true);
viewGroup.addView(view, params);
}
}
parent.onFinishInflate();
if (finishInflate) parent.onFinishInflate();
}
private void parseRequestFocus(XmlPullParser parser, View parent)
@@ -674,7 +674,7 @@ public abstract class LayoutInflater {
if (TAG_MERGE.equals(childName)) {
// Inflate all children.
rInflate(childParser, parent, childAttrs);
rInflate(childParser, parent, childAttrs, false);
} else {
final View view = createViewFromTag(childName, childAttrs);
final ViewGroup group = (ViewGroup) parent;
@@ -699,7 +699,7 @@ public abstract class LayoutInflater {
}
// Inflate all children.
rInflate(childParser, view, childAttrs);
rInflate(childParser, view, childAttrs, true);
// Attempt to override the included layout's android:id with the
// one set on the <include /> tag itself.

View File

@@ -40,6 +40,13 @@ import android.widget.RemoteViews.RemoteView;
* <p>
* Also see {@link LinearLayout.LayoutParams android.widget.LinearLayout.LayoutParams}
* for layout attributes </p>
*
* @attr ref android.R.styleable#LinearLayout_baselineAligned
* @attr ref android.R.styleable#LinearLayout_baselineAlignedChildIndex
* @attr ref android.R.styleable#LinearLayout_gravity
* @attr ref android.R.styleable#LinearLayout_measureWithLargestChild
* @attr ref android.R.styleable#LinearLayout_orientation
* @attr ref android.R.styleable#LinearLayout_weightSum
*/
@RemoteView
public class LinearLayout extends ViewGroup {
@@ -112,7 +119,11 @@ public class LinearLayout extends ViewGroup {
}
public LinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this(context, attrs, 0);
}
public LinearLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a =
context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.LinearLayout);
@@ -137,8 +148,7 @@ public class LinearLayout extends ViewGroup {
mBaselineAlignedChildIndex =
a.getInt(com.android.internal.R.styleable.LinearLayout_baselineAlignedChildIndex, -1);
// TODO: Better name, add Java APIs, make it public
mUseLargestChild = a.getBoolean(R.styleable.LinearLayout_useLargestChild, false);
mUseLargestChild = a.getBoolean(R.styleable.LinearLayout_measureWithLargestChild, false);
a.recycle();
}
@@ -167,6 +177,33 @@ public class LinearLayout extends ViewGroup {
mBaselineAligned = baselineAligned;
}
/**
* When true, all children with a weight will be considered having
* the minimum size of the largest child. If false, all children are
* measured normally.
*
* @return True to measure children with a weight using the minimum
* size of the largest child, false otherwise.
*/
public boolean isMeasureWithLargestChildEnabled() {
return mUseLargestChild;
}
/**
* When set to true, all children with a weight will be considered having
* the minimum size of the largest child. If false, all children are
* measured normally.
*
* Disabled by default.
*
* @param enabled True to measure children with a weight using the
* minimum size of the largest child, false otherwise.
*/
@android.view.RemotableViewMethod
public void setMeasureWithLargestChildEnabled(boolean enabled) {
mUseLargestChild = enabled;
}
@Override
public int getBaseline() {
if (mBaselineAlignedChildIndex < 0) {