Bugfix for GridLayout assuming that the x value of last column index is maximal. This is not the case when column indexes are defined incorrectly and GridLayout should still work in this case.

Change-Id: I5deb3fb43ed1dd16dd20868854b96ebae4d30623
This commit is contained in:
Philip Milne
2011-06-13 10:44:49 -07:00
parent 60f36a52ac
commit 51f17d5461
3 changed files with 32 additions and 28 deletions

View File

@@ -494,6 +494,14 @@ public class GridLayout extends ViewGroup {
requestLayout();
}
private static int max2(int[] a, int valueIfEmpty) {
int result = valueIfEmpty;
for (int i = 0, N = a.length; i < N; i++) {
result = Math.max(result, a[i]);
}
return result;
}
private static int sum(float[] a) {
int result = 0;
for (int i = 0, length = a.length; i < length; i++) {
@@ -1409,7 +1417,7 @@ public class GridLayout extends ViewGroup {
// External entry points
private int size(int[] locations) {
return locations[locations.length - 1] - locations[0];
return max2(locations, 0) - locations[0];
}
private int getMin() {
@@ -1878,21 +1886,13 @@ public class GridLayout extends ViewGroup {
return result;
}
private static int max(int[] a, int valueIfEmpty) {
int result = valueIfEmpty;
for (int i = 0, length = a.length; i < length; i++) {
result = Math.max(result, a[i]);
}
return result;
}
/*
Create a compact array of keys or values using the supplied index.
*/
private static <K> K[] compact(K[] a, int[] index) {
int size = a.length;
Class<?> componentType = a.getClass().getComponentType();
K[] result = (K[]) Array.newInstance(componentType, max(index, -1) + 1);
K[] result = (K[]) Array.newInstance(componentType, max2(index, -1) + 1);
// this overwrite duplicates, retaining the last equivalent entry
for (int i = 0; i < size; i++) {

View File

@@ -19,14 +19,17 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:useDefaultMargins="true"
android:marginsIncludedInAlignment="false"
android:columnCount="4"
>
<TextView
android:text="Email account"
android:textSize="48dip"
android:layout_columnSpan="4"
android:layout_gravity="center_horizontal"
/>
@@ -34,12 +37,14 @@
<TextView
android:text="You can configure email in just a few steps:"
android:textSize="20dip"
android:layout_columnSpan="4"
android:layout_gravity="left"
/>
<TextView
android:text="Email address:"
android:layout_gravity="right"
/>
@@ -49,6 +54,7 @@
<TextView
android:text="Password:"
android:layout_column="0"
android:layout_gravity="right"
/>
@@ -58,14 +64,15 @@
/>
<Space
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:layout_row="4"
android:layout_column="2"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:text="Manual setup"
android:layout_row="5"
android:layout_column="3"
android:layout_gravity="fill_horizontal"
@@ -73,6 +80,7 @@
<Button
android:text="Next"
android:layout_column="3"
android:layout_gravity="fill_horizontal"
/>

View File

@@ -20,11 +20,15 @@ import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.Space;
import android.widget.TextView;
import static android.text.InputType.TYPE_CLASS_TEXT;
import static android.view.inputmethod.EditorInfo.*;
import static android.view.inputmethod.EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
import static android.view.inputmethod.EditorInfo.TYPE_TEXT_VARIATION_PASSWORD;
import static android.widget.GridLayout.*;
public class Activity2 extends Activity {
@@ -42,12 +46,12 @@ public class Activity2 extends Activity {
Group row6 = new Group(6, CENTER);
Group row7 = new Group(7, CENTER);
Group col1a = new Group(1, 5, CENTER);
Group col1b = new Group(1, 5, LEFT);
Group col1a = new Group(1, 4, CENTER);
Group col1b = new Group(1, 4, LEFT);
Group col1c = new Group(1, RIGHT);
Group col2 = new Group(2, LEFT);
Group col3 = new Group(3, FILL);
Group col4 = new Group(4, FILL);
Group col2 = new Group(2, LEFT);
Group col3 = new Group(3, FILL);
Group col4 = new Group(4, FILL);
{
TextView v = new TextView(context);
@@ -55,20 +59,17 @@ public class Activity2 extends Activity {
v.setText("Email setup");
vg.addView(v, new LayoutParams(row1, col1a));
}
{
TextView v = new TextView(context);
v.setTextSize(20);
v.setText("You can configure email in just a few steps:");
vg.addView(v, new LayoutParams(row2, col1b));
}
{
TextView v = new TextView(context);
v.setText("Email address:");
vg.addView(v, new LayoutParams(row3, col1c));
}
{
EditText v = new EditText(context);
v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
@@ -78,13 +79,11 @@ public class Activity2 extends Activity {
vg.addView(v, lp);
}
}
{
TextView v = new TextView(context);
v.setText("Password:");
vg.addView(v, new LayoutParams(row4, col1c));
}
{
TextView v = new EditText(context);
v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
@@ -94,7 +93,6 @@ public class Activity2 extends Activity {
vg.addView(v, lp);
}
}
{
Space v = new Space(context);
{
@@ -104,13 +102,11 @@ public class Activity2 extends Activity {
vg.addView(v, lp);
}
}
{
Button v = new Button(context);
v.setText("Manual setup");
vg.addView(v, new LayoutParams(row6, col4));
}
{
Button v = new Button(context);
v.setText("Next");