Search code examples
androidandroid-layoutandroid-scrollview

How to use two column ScrollView?


I want a 2-column ScrollView. In each column, there should be an ImageButton:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_height="800dp"
android:background="#FFF"
android:layout_width="600dp" >

<LinearLayout
    android:id="@+id/categoryLinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</LinearLayout>

</ScrollView>

And the code:

        LinearLayout sv = (LinearLayout) findViewById(R.id.categoryLinearLayout1);

    for (int i = 0; i < 10; i++) {
        ImageButton ib = new ImageButton(this);
        // ib.setImageDrawable(getResources().getDrawable(R.drawable.cat1));

        Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.cat1);
        int width = 300;
        int height = 300;
        Bitmap resizedbitmap = Bitmap.createScaledBitmap(bmp, width,
                height, true);
        ib.setImageBitmap(resizedbitmap);
        sv.addView(ib);
    }

But in this way, all 10 ImageButtons horizontally. What I need is, put 2 ImageButton in a row (it makes 600px) and go down, put more 2 ImageButtons etc. So there will be 5 rows for 10 ImageButtons.

How can I do that?


Solution

  • Use a TableLayout:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_height="800dp"
    android:background="#FFF"
    android:layout_width="600dp" >
    
    <TableLayout
        android:id="@+id/categoryLinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </TableLayout>
    
    </ScrollView>
    

    Then in your code:

    TableLayout sv = (TableLayout) findViewById(R.id.categoryLinearLayout1);
    
    for (int i = 0; i < 5; i++) {
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
        for (int j = 0; j < 2; j++) {
             ImageButton ib = new ImageButton(this);
             // ib.setImageDrawable(getResources().getDrawable(R.drawable.cat1));
             Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                  R.drawable.cat1);
             int width = 300;
             int height = 300;
             Bitmap resizedbitmap = Bitmap.createScaledBitmap(bmp, width,
                height, true);
             ib.setImageBitmap(resizedbitmap);
             ib.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
             tr.addView(ib);
         }
         sv.add(tr); 
    }