【INVISIBLEとGONEはどう違う?】viewの可視状態


VISIBLE / INVISIBLE / GONE



Androidのviewの可視状態を表すステータスは3つあります。

VISIBLE 見える
INVISIBLE 見えない
GONE 見えない(存在していないことになる)


xmlで初期状態として指定することもできますし、

Javaで指定のタイミングで設定することも可能です。

xmlで指定するときは、以下のようにandroid:visibilityを設定することで初期状態を設定できます。

android:visibility="visible"

表示されます。

android:visibility="invisible"

非表示になります。

android:visibility="gone"

非表示になります。存在しなかったことになります。


android:visibilityを設定していないと自動的にvisible扱いとなり、表示されます。


JAVAでのVisibility設定



Javaで可視状態を設定するには、View.setVisibility(VISIBLE状態)を使います。

一番簡単なFragmentの実装方法 で作成したアプリの SecondFragment を改造して、

ボタンを押下することによって、

VISIBLE / INVISIBLE / GONE を切り替えることができるサンプルアプリを作りました。

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ImageView imageView = view. findViewById(R.id.imageView);

    /* VISIBLEボタンが押された時、画像をVISIBLE状態にする。*/
    Button visibleButton = view.findViewById(R.id.visible_button);
    visibleButton.setOnClickListener(clickView -> {
        Log.d(TAG, "visibleButton pressed!");
        imageView.setVisibility(View.VISIBLE);
    });

    /* INVISIBLEボタンが押された時、画像をINVISIBLE状態にする。*/
    Button invisibleButton = view.findViewById(R.id.invisible_button);
    invisibleButton.setOnClickListener(clickView -> {
        Log.d(TAG, "invisibleButton pressed!");
        imageView.setVisibility(View.INVISIBLE);
    });

    /* GONEボタンが押された時、画像をGONE状態にする。*/
    Button goneButton = view.findViewById(R.id.gone_button);
    goneButton.setOnClickListener(clickView -> {
        Log.d(TAG, "goneButton pressed!");
        imageView.setVisibility(View.GONE);
    });

    Button backButton = view.findViewById(R.id.back_button);
    backButton.setOnClickListener(clickView -> {
        Log.d(TAG, "BackButton pressed!");
        getFragmentManager().popBackStack();
    });

}


VISIBLEボタンが押下されると、View.setVisibitiy(View.VISIBLE)により、写真が表示されます。

imageView.setVisibility(View.VISIBLE);


INVISIBLEボタンが押下されると、View.setVisibitiy(View.INVISIBLE)により、写真が非表示になります。

imageView.setVisibility(View.INVISIBLE);


GONEボタンが押下されると、View.setVisibitiy(View.GONE)により、写真が非表示になります。

imageView.setVisibility(View.GONE);


INVISIBLEとGONEの違い



INVISIBLEとGONEの違いは、

ただ非表示にするか or そもそも存在しないものとして扱うか


にあります。


View.INVISIBLE

ただviewを非表示にします。viewの領域はそのままです。
そこにあるけど目に見えない!そんな状態です。


View.GONE

そもそも存在していないことになります。viewの領域も無くなります。
そこには何もなくもちろん目に見えない!そんな状態です。


CSSで言うところの hidden と none のような関係ですね!

上記のサンプルアプリでは、

ボタンの位置を絶対指定しているのでボタンの位置が変わることはありませんでしたが、

ボタンの位置を相対的に指定していた場合、

GONEの場合は画像があった位置までボタンが詰められることになります。

以上参考になれば幸いです。

ご精読ありがとうございました!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です