AndroidでViewの切り替え時にButtonが表示されない問題(自分用のメモ)
Activityに複数のViewをAddしておき必要に応じてViewを切り替えて使用するケースに於いて
特定の端末で切り替えたViewのButtonが表示されないという問題が発生した。
初期化(onCreate)時に
//一つ目のView
firstView = this.getLayoutInflater().inflate(R.layout.first, null);
addContentView(firstView , new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//二つ目のView
secondView = this.getLayoutInflater().inflate(R.layout.second, null);
addContentView(secondView , new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
resultView.setVisibility(View.INVISIBLE);
としておき、必要に応じて
firstView.setVisibility(View.INVISIBLE);
secondView.setVisibility(View.VISIBLE);
という感じに切り替えを行うことを想定。
すると特定の端末(恐らくOS依存)においてsecondViewに配置したButtonが表示されないケースが発生。
Buttonを複数配置した場合その内の一部だけ表示されるケースも発生した。
調査の結果上記で
setVisibility(View.INVISIBLE);
となっている部分を
setVisibility(View.GONE);
とすれば問題なく表示されることが判明。
以下推測だが、
addContentView()の直後でsetVisibility(View.INVISIBLE)したことでViewの構築が途中でストップしてしまい、
setVisibility(View.VISIBLE)した際に不完全なViewがそのまま表示されたのではないかと思う。
これを最初の処理をsetVisibility(View.GONE)に変えると、
setVisibility(View.VISIBLE)した際にViewの構築が最初から行われるので問題が発生しないのではないだろうか?
ちなみにView切り替え時に表示されないButtonを
button.setVisibility(View.GONE);
button.setVisibility(View.VISIBLE);
としても表示される様になるが、これはやや対症療法的な気がする。
Activityに複数のViewをAddしておき必要に応じてViewを切り替えて使用するケースに於いて
特定の端末で切り替えたViewのButtonが表示されないという問題が発生した。
初期化(onCreate)時に
//一つ目のView
firstView = this.getLayoutInflater().inflate(R.layout.first, null);
addContentView(firstView , new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//二つ目のView
secondView = this.getLayoutInflater().inflate(R.layout.second, null);
addContentView(secondView , new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
resultView.setVisibility(View.INVISIBLE);
としておき、必要に応じて
firstView.setVisibility(View.INVISIBLE);
secondView.setVisibility(View.VISIBLE);
という感じに切り替えを行うことを想定。
すると特定の端末(恐らくOS依存)においてsecondViewに配置したButtonが表示されないケースが発生。
Buttonを複数配置した場合その内の一部だけ表示されるケースも発生した。
調査の結果上記で
setVisibility(View.INVISIBLE);
となっている部分を
setVisibility(View.GONE);
とすれば問題なく表示されることが判明。
以下推測だが、
addContentView()の直後でsetVisibility(View.INVISIBLE)したことでViewの構築が途中でストップしてしまい、
setVisibility(View.VISIBLE)した際に不完全なViewがそのまま表示されたのではないかと思う。
これを最初の処理をsetVisibility(View.GONE)に変えると、
setVisibility(View.VISIBLE)した際にViewの構築が最初から行われるので問題が発生しないのではないだろうか?
ちなみにView切り替え時に表示されないButtonを
button.setVisibility(View.GONE);
button.setVisibility(View.VISIBLE);
としても表示される様になるが、これはやや対症療法的な気がする。
※コメント投稿者のブログIDはブログ作成者のみに通知されます