am a1b647c8: Merge "Always remeasure ListView scrap used to obtain minimum width" into mnc-dev

* commit 'a1b647c8833cf85e304e3c201e7d0477b9838502':
  Always remeasure ListView scrap used to obtain minimum width
This commit is contained in:
Alan Viverette
2015-06-29 19:52:06 +00:00
committed by Android Git Automerger
4 changed files with 27 additions and 20 deletions

View File

@@ -1143,8 +1143,8 @@ public class ListView extends AbsListView {
// Sets up mListPadding // Sets up mListPadding
super.onMeasure(widthMeasureSpec, heightMeasureSpec); super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec); final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec); final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec);
@@ -1153,10 +1153,12 @@ public class ListView extends AbsListView {
int childState = 0; int childState = 0;
mItemCount = mAdapter == null ? 0 : mAdapter.getCount(); mItemCount = mAdapter == null ? 0 : mAdapter.getCount();
if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED || if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED
heightMode == MeasureSpec.UNSPECIFIED)) { || heightMode == MeasureSpec.UNSPECIFIED)) {
final View child = obtainView(0, mIsScrap); final View child = obtainView(0, mIsScrap);
// Lay out child directly against the parent measure spec so that
// we can obtain exected minimum width and height.
measureScrapChild(child, 0, widthMeasureSpec, heightSize); measureScrapChild(child, 0, widthMeasureSpec, heightSize);
childWidth = child.getMeasuredWidth(); childWidth = child.getMeasuredWidth();
@@ -1173,7 +1175,7 @@ public class ListView extends AbsListView {
widthSize = mListPadding.left + mListPadding.right + childWidth + widthSize = mListPadding.left + mListPadding.right + childWidth +
getVerticalScrollbarWidth(); getVerticalScrollbarWidth();
} else { } else {
widthSize |= (childState&MEASURED_STATE_MASK); widthSize |= (childState & MEASURED_STATE_MASK);
} }
if (heightMode == MeasureSpec.UNSPECIFIED) { if (heightMode == MeasureSpec.UNSPECIFIED) {
@@ -1186,8 +1188,9 @@ public class ListView extends AbsListView {
heightSize = measureHeightOfChildren(widthMeasureSpec, 0, NO_POSITION, heightSize, -1); heightSize = measureHeightOfChildren(widthMeasureSpec, 0, NO_POSITION, heightSize, -1);
} }
setMeasuredDimension(widthSize , heightSize); setMeasuredDimension(widthSize, heightSize);
mWidthMeasureSpec = widthMeasureSpec;
mWidthMeasureSpec = widthMeasureSpec;
} }
private void measureScrapChild(View child, int position, int widthMeasureSpec, int heightHint) { private void measureScrapChild(View child, int position, int widthMeasureSpec, int heightHint) {
@@ -1199,16 +1202,20 @@ public class ListView extends AbsListView {
p.viewType = mAdapter.getItemViewType(position); p.viewType = mAdapter.getItemViewType(position);
p.forceAdd = true; p.forceAdd = true;
int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
mListPadding.left + mListPadding.right, p.width); mListPadding.left + mListPadding.right, p.width);
int lpHeight = p.height; final int lpHeight = p.height;
int childHeightSpec; final int childHeightSpec;
if (lpHeight > 0) { if (lpHeight > 0) {
childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
} else { } else {
childHeightSpec = MeasureSpec.makeSafeMeasureSpec(heightHint, MeasureSpec.UNSPECIFIED); childHeightSpec = MeasureSpec.makeSafeMeasureSpec(heightHint, MeasureSpec.UNSPECIFIED);
} }
child.measure(childWidthSpec, childHeightSpec); child.measure(childWidthSpec, childHeightSpec);
// Since this view was measured directly aginst the parent measure
// spec, we must measure it again before reuse.
child.forceLayout();
} }
/** /**
@@ -1248,8 +1255,7 @@ public class ListView extends AbsListView {
* @return The height of this ListView with the given children. * @return The height of this ListView with the given children.
*/ */
final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition, final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
final int maxHeight, int disallowPartialChildPosition) { int maxHeight, int disallowPartialChildPosition) {
final ListAdapter adapter = mAdapter; final ListAdapter adapter = mAdapter;
if (adapter == null) { if (adapter == null) {
return mListPadding.top + mListPadding.bottom; return mListPadding.top + mListPadding.bottom;
@@ -1907,8 +1913,8 @@ public class ListView extends AbsListView {
} }
p.viewType = mAdapter.getItemViewType(position); p.viewType = mAdapter.getItemViewType(position);
if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter && if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter
p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) { && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {
attachViewToParent(child, flowDown ? -1 : 0, p); attachViewToParent(child, flowDown ? -1 : 0, p);
} else { } else {
p.forceAdd = false; p.forceAdd = false;
@@ -1936,10 +1942,10 @@ public class ListView extends AbsListView {
} }
if (needToMeasure) { if (needToMeasure) {
int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec, final int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,
mListPadding.left + mListPadding.right, p.width); mListPadding.left + mListPadding.right, p.width);
int lpHeight = p.height; final int lpHeight = p.height;
int childHeightSpec; final int childHeightSpec;
if (lpHeight > 0) { if (lpHeight > 0) {
childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
} else { } else {

View File

@@ -85,7 +85,7 @@ import java.util.Comparator;
*/ */
public class ViewPager extends ViewGroup { public class ViewPager extends ViewGroup {
private static final String TAG = "ViewPager"; private static final String TAG = "ViewPager";
private static final boolean DEBUG = true; private static final boolean DEBUG = false;
private static final int MAX_SCROLL_X = 2 << 23; private static final int MAX_SCROLL_X = 2 << 23;
private static final boolean USE_CACHE = false; private static final boolean USE_CACHE = false;

View File

@@ -32,6 +32,7 @@
<android.widget.YearPickerView <android.widget.YearPickerView
android:id="@+id/date_picker_year_picker" android:id="@+id/date_picker_year_picker"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:scrollIndicators="bottom" />
</com.android.internal.widget.DialogViewAnimator> </com.android.internal.widget.DialogViewAnimator>

View File

@@ -14,7 +14,7 @@
limitations under the License. limitations under the License.
--> -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android" <TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/month_text_view" android:id="@id/text1"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall" android:minHeight="?attr/listPreferredItemHeightSmall"