Android

[Android] 固定ヘッダー・フッター付きの ListView を作成する

ListView の上下に固定の View を作成したい場合があります。固定の View に広告ネットワークを載せる時とかですね。この固定の View は、ListView 内をスクロールしても位置が固定されるものを想定しています。

他のブログ記事にも実装方法は載っているのですが、xml で記述する方法しかなかったので、全部 .java ファイルに記述する方法(Programatically)をこの記事では紹介します。

固定ヘッダー・フッター付きの ListView

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 全体
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT)
        );
        linearLayout.setOrientation(LinearLayout.VERTICAL);

        // ヘッダー部分
        LinearLayout adViewLayout = new LinearLayout(this);
        adViewLayout.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT)
        );
        adViewLayout.setBackgroundColor(Color.BLACK);
        adViewLayout.setGravity(Gravity.CENTER_HORIZONTAL);

        Button button = new Button(this);
        button.setText("広告");
        adViewLayout.addView(button);

        // ListView
        String[] array = {"北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array);
        ListView listView = new ListView(this);
        listView.setAdapter(adapter); // リストビューにアダプタを設定
        listView.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT,
                1.f)
        );

        linearLayout.addView(adViewLayout);
        linearLayout.addView(listView);

        setContentView(linearLayout);
    }
}

最後の linearLayout.addView(adViewLayout) と linearLayout.addView(listView) の位置を入れ替えることで、ヘッダーもしくはフッターが固定されます。

実行結果