読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

setLayoutParamsでClassCastException

Android

Viewの大きさを変更するときに、ちょいとハマったのでメモメモ。


まず、このようなレイアウトがあるとします。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout
    	android:id="@+id/layout"
    	android:layout_width="100dp"
    	android:layout_height="100dp"
    	android:background="#FF0000"/>
</LinearLayout>


で、RelativeLayout のほうの大きさを変更する場合に下のように書くと ClassCastException が発生しちゃいます。

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(10, 10);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
layout.setLayoutParams(params);


setLayoutParamsには親のクラスのLayoutParamsを指定する必要があります。
正解はコッチです。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
layout.setLayoutParams(params);

ややこしいですねぇ…


オレのオススメは下の書き方です。

ViewGroup.LayoutParams params = layout.getLayoutParams();
params.width = 10;
params.height = 10;
layout.setLayoutParams(params);

コッチのほうがレイアウトが変わった時もソースを修正せずに対応できるので楽チンです。


Androidのデザイン周りはかなり面倒で困ったものです…