[Android Studio] GridLayoutでウィジェットを格子状に並べる(動的)

どうも、tatsuです!

今日は、GridLayoutでウィジェットを格子状に並べる(動的)方法を説明します。

※この記事で使用しているAndroid Studioのバージョンは2.3.3です。

GridLayoutでウィジェットを格子状に並べる(動的)

GridLayoutは設定した数で自動的に折り返すため、プログラム側から追加をしやすいレイアウトです。
ソーシャルゲームでも、持っているキャラクター一覧を表示した場合によく見るレイアウトだと思います。
以下では、レイアウトファイルで作成したボタンにプログラムで作成したボタンを追加した例です。

activity_main.xml

activity_main.xmlは以下のようにします。

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gridLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="3"
    tools:context="com.android.tatsu.myapplication.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="あ"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="い"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="う"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="え"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="お"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="か"
        />

</GridLayout>

MainActivity.java

MainActivity.javaは以下のようにします。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // idがgridLayoutのGridLayoutを取得
        GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout);
        // データ生成
        for(int i = 0; i < 20; i++){
            // ボタンを1つ生成
            Button button = new Button(this);
            button.setText("追加" + i);
            // GridLayoutにボタンを追加
            gridLayout.addView(button);
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です