private int FitSize(int position, int left, bool scrollingUp) { int cellRight = -1; int columnCacheWidth = mColumnHeaderLayoutManager.GetCacheWidth(position); Android.Views.View column = mColumnHeaderLayoutManager.FindViewByPosition(position); if (column != null) { // Determine default right cellRight = column.Left + columnCacheWidth + 1; if (scrollingUp) { // Loop reverse order for (int i = FindLastVisibleItemPosition(); i >= FindFirstVisibleItemPosition(); i--) { cellRight = Fit(position, i, left, cellRight, columnCacheWidth); } } else { // Loop for all rows which are visible. for (int j = FindFirstVisibleItemPosition(); j < FindLastVisibleItemPosition() + 1; j++) { cellRight = Fit(position, j, left, cellRight, columnCacheWidth); } } } else { Log.Error(LogTag, "Warning: column couldn't found for " + position); } return(cellRight); }
public override void MeasureChild(Android.Views.View child, int widthUsed, int heightUsed) { int columnPosition = GetPosition(child); // Get cached width size of column and cell int cacheWidth = mCellLayoutManager.GetCacheWidth(mYPosition, columnPosition); int columnCacheWidth = mColumnHeaderLayoutManager.GetCacheWidth(columnPosition); // Already each of them is same width size. if (cacheWidth != -1 && cacheWidth == columnCacheWidth) { // Control whether we need to set width or not. if (child.MeasuredWidth != cacheWidth) { TableViewUtils.SetWidth(child, cacheWidth); } } else { Android.Views.View columnHeaderChild = mColumnHeaderLayoutManager.FindViewByPosition(columnPosition); if (columnHeaderChild == null) { return; } // Need to calculate which one has the broadest width ? FitWidthSize(child, mYPosition, columnPosition, cacheWidth, columnCacheWidth, columnHeaderChild); } // Control all of the rows which has same column position. if (ShouldFitColumns(columnPosition, mYPosition)) { if (mLastDx < 0) { Log.Warn(LogTag, "x: " + columnPosition + " y: " + mYPosition + " fitWidthSize " + "left side "); mCellLayoutManager.FitWidthSize(columnPosition, true); } else { mCellLayoutManager.FitWidthSize(columnPosition, false); Log.Warn(LogTag, "x: " + columnPosition + " y: " + mYPosition + " fitWidthSize " + "right side"); } mNeedFitForVerticalScroll = false; } // It need to be cleared to prevent unnecessary calculation. mNeedFitForHorizontalScroll = false; }