hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

widgetを非表示にして詰める方法

やり方が分からなかったのですが、Twitterで方法を教えて貰いました。

やりたい事のイメージ

ActivityがRunning状態で。左画像レイアウト状態のとき、動的に右画像レイアウト状態にする。
device1device2

やりかた

XML定義

TextViewとButtonを定義します。ここは普通。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <TextView
        android:id="@+id/txt"
        android:text="@string/hello"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    ></TextView>
    <Button
        android:text="button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickBtn"
    ></Button>
</LinearLayout>
Javaコード

ボタンが押されたらTextViewを非表示にして詰める処理。

public class Hello2 extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onClickBtn(View v) {
        TextView txt = (TextView) findViewById(R.id.txt);
        txt.setVisibility(View.GONE);
    }
}

View#setVisibilitywidgetを非表示にする際によく使いますが、引数に View.GONE が設定できる事を初めて知りました。
View.INVISIBLE を使うと非表示にするけど詰めないが、View.GONEを使うと非表示にして詰めてくれるみたいです。

感謝

もっこう先生ありがとうございます!