今後も使う機会がありそうなので備忘録としてまとめ。
Android の GridView のセルを正方形に整形する方法についてです。
開発したアプリは諸事情あって ScrollView の中で GridView を使用しているため、GridView をカスタイマイズしているのですが、それでも問題なく実装出来ました。
参考にさせていただいた記事はこちらから。
xml – Android layout with square buttons – Stack Overflow
https://stackoverflow.com/questions/2948212/android-layout-with-square-buttons
まず、下記のとおりに SquareView.java
を作成します。
package com.cpointlab.XXXX.XXXX; import android.content.Context; import android.util.AttributeSet; import android.widget.RelativeLayout; public class SquareView extends RelativeLayout { public SquareView(Context context) { super(context); } public SquareView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, widthMeasureSpec); } }
ポイントは、オーバーライドしている onMeasure()
内の super.onMeasure(widthMeasureSpec, widthMeasureSpec);
です。
ここで本来は高さを返すところを横幅を返すように変更しているので、セルが正方形になります。
なお、パッケージ名は適宜変更してください。
あとは、この SquareView.java
を GridView
のセルのレイアウトファイルで使用するように変更します。
<com.cpointlab.XXXX.XXXX.SquareView xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" app:cardElevation="4dp" app:cardUseCompatPadding="true"> ...... ...... </android.support.v7.widget.CardView> </com.cpoint.goozen.Coupon.SquareView>
以前のコードでは、親要素に <RelativeLayout>
を使っていたのですが、それを上記コードのように <com.cpointlab.XXXX.XXXX.SquareView>
を使用するように置き換えます。
変更点は以上です。
なお、開発中のアプリではデザインで <CardView>
を使っているのですが、この時 android:layout_height
に match_parent
を設定するようにしてください。
これを忘れていたせいで、アプリを実行しても GridView
のセルが正方形にならず、ちょっとハマりかけました…。
皆様もご注意ください。
以上、Android の GridView のセルを正方形に整形する方法についてでした。
ご参考になれば幸いです。