web-dev-qa-db-ja.com

アンドロイド:見えないものと消えたものの違いは?

表示状態のinvisiblegoneの違いは何ですか?

425
Rob

不可:

このビューは表示されていませんが、レイアウトのためにスペースを取っています。

なくなった:

このビューは表示されず、レイアウトのためにスペースを取りません。

654
Iñigo

ドキュメント からそれを言うことができます

View.GONEこのビューは表示されず、レイアウトのためにスペースを取りません。

View.INVISIBLEこのビューは表示されませんが、レイアウトのためにスペースを取っています。


いくつかの写真でアイデアを明確にしましょう。

以下のように3つのボタンがあるとします

enter image description here

Button Twoの表示設定を非表示(View.INVISIBLE)に設定した場合、出力はになります。

enter image description here

ボタン2の表示設定を消した状態(View.GONE)に設定すると、出力はになります。

enter image description here

これがあなたの疑問を解消することを願っています。

243
Pankaj Kumar

ListViewまたはGridViewの場合、可視性が最初にに設定されている場合は、別の違いがあります。

不可:

アダプタのgetView()関数が呼び出されました

なくなった:

アダプタのgetView()関数が呼び出さなかったため、ビューが不要な場合にビューをロードできません。

29
mes

不可:
見解を描く必要があり、時間がかかります。

なくなった:
見解を描く必要はありません。

9
twlkyao

あなたがView.GONEとして可視性を持つビューを初期化するならば、ビューが初期化されなかったかもしれなくて、そしてあなたがあなたが若干のランダムエラーを受けるであろうということを正しいそして成功した答えに付け加えたい。

たとえば、レイアウトをView.GONEに初期化してからアニメーションを開始しようとした場合、私の経験からすると、私のアニメーションはランダムに動作しています。時にははい、時にはいいえ。

そのため、ビューを処理(サイズ変更、移動など)する前に、画面に表示(描画)するためにView.VISIBLEまたはView.INVISIBLEとして初期化してから処理する必要があります。

4
  • View.INVISIBLE - >ビューは見えませんが、レイアウト上のスペースを占有します。

  • View.GONE - >ビューは表示されず、レイアウト内のスペースを占有しません。

3

プログラムをコンパイルするたびに削除されると、コンポーネントは初期化されます。つまり、レイアウトからコンポーネントを削除します。コンポーネントを非表示にすると、レイアウト内で同じスペースを使用しますが、初期化する必要はありません。

visibility = Goneを設定した場合は、コンポーネントを初期化する必要があります。

例Button _mButton = new Button(this);

_mButton =(ボタン)findViewByid(R.id.mButton);

そのため、Visibility = invisibleと比べて時間がかかります。

2
kuldeep zala