アクティビティは描画UIとは関係ありません(いずれにせよ、決してこれを直接行うことはありません)。ビュークラスは描画を担当します。
場合によっては、カスタムクラスでButton
クラスを拡張する必要があります。 onMeasure()
を上書きして正方形にします。そして背景はあなたがそれを設定する何かになります。
簡単な例:
SquareButton.java
:このボタンmain.xml
を使用しています
package com.inazaruk.helloworld;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;
public class SquareButton extends Button
{
public SquareButton(Context ctx)
{
super(ctx);
}
public SquareButton(Context ctx, AttributeSet attrs)
{
super(ctx, attrs);
}
public SquareButton(Context ctx, AttributeSet attrs, int defStyle)
{
super(ctx, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
/* currently view is rectangle, so we get the shorter size
* and make it square. */
int width = getMeasuredWidth();
int height = getMeasuredHeight();
width = height =(int) (Math.min(width, height));
super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
}
}
レイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
a:orientation="vertical"
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:gravity="center"
a:weightSum="1">
<com.inazaruk.helloworld.SquareButton
a:id="@+id/button"
a:layout_height="0dp"
a:layout_weight="0.5"
a:layout_width="fill_parent"
a:background="#ffffffff"
a:text="foo"
a:gravity="center"
/>
</LinearLayout>
結果のスクリーンショット: