/// <summary> /// <p>Applies the columns collapse status to a new row added to this /// table. /// </summary> /// <remarks> /// <p>Applies the columns collapse status to a new row added to this /// table. This method is invoked by PassThroughHierarchyChangeListener /// upon child insertion.</p> /// <p>This method only applies to /// <see cref="TableRow">TableRow</see> /// instances.</p> /// </remarks> /// <param name="child">the newly added child</param> private void trackCollapsedColumns(android.view.View child) { if (child is android.widget.TableRow) { android.widget.TableRow row = (android.widget.TableRow)child; android.util.SparseBooleanArray collapsedColumns = mCollapsedColumns; int count = collapsedColumns.size(); { for (int i = 0; i < count; i++) { int columnIndex = collapsedColumns.keyAt(i); bool isCollapsed = collapsedColumns.valueAt(i); // the collapse status is set only when the column should be // collapsed; otherwise, this might affect the default // visibility of the row's children if (isCollapsed) { row.setColumnCollapsed(columnIndex, isCollapsed); } } } } }
private void mutateColumnsWidth(android.util.SparseBooleanArray columns, bool allColumns , int size, int totalWidth) { int skipped = 0; int[] maxWidths = mMaxWidths; int length = maxWidths.Length; int count = allColumns ? length : columns.size(); int totalExtraSpace = size - totalWidth; int extraSpace = totalExtraSpace / count; // Column's widths are changed: force child table rows to re-measure. // (done by super.measureVertical after shrinkAndStretchColumns.) int nbChildren = getChildCount(); { for (int i = 0; i < nbChildren; i++) { android.view.View child = getChildAt(i); if (child is android.widget.TableRow) { child.forceLayout(); } } } if (!allColumns) { { for (int i_1 = 0; i_1 < count; i_1++) { int column = columns.keyAt(i_1); if (columns.valueAt(i_1)) { if (column < length) { maxWidths[column] += extraSpace; } else { skipped++; } } } } } else { { for (int i_1 = 0; i_1 < count; i_1++) { maxWidths[i_1] += extraSpace; } } // we don't skip any column so we can return right away return; } if (skipped > 0 && skipped < count) { // reclaim any extra space we left to columns that don't exist extraSpace = skipped * extraSpace / (count - skipped); { for (int i_1 = 0; i_1 < count; i_1++) { int column = columns.keyAt(i_1); if (columns.valueAt(i_1) && column < length) { if (extraSpace > maxWidths[column]) { maxWidths[column] = 0; } else { maxWidths[column] += extraSpace; } } } } } }