2017-06-27 15 views
-1

私は私のアプリに私の種類のステータスバーを追加したいと思います。 ステータスバーには、外部デバイスのステータスが表示されます。 デバイスが接続されていない場合は、テキストだけが表示されますが、接続されている場合は、デバイスに関する情報が必要です。また、そのバーの背景色も変わるはずです。異なるレイアウトを切り替える

各項目の属性と可視性を変更する代わりに、2つのレイアウトを切り替えて作成することを考えました。

これが好ましい方法ですか?どのようにこれらの2つの間で最適に切り替えるには?

+0

次回は、この質問はなぜ控えめになっているのですか?間違った質問? oO – Dirk

答えて

1

2つの別々のレイアウトファイルを定義するのが最も良い方法です。両方の場合でUIが完全に異なるためです。 FrameLayoutのようなViewGroupをコンテナとし、接続状態が変化したときに、それぞれのレイアウトを膨張させてコンテナに追加します(追加する前にすべてのビューをコンテナから削除します)。

さらに最適化するには、接続状態の変更が頻繁に発生する可能性がある場合は、インフレしたビューをローカルに保存し、ビューを拡張する前にnullをチェックします。既に膨らませた状態で膨らませてはいけません。その場合、ビューの内容を更新するだけです。

+0

これはかなりうまくいきます。しかし、プログラムでレイアウトを膨張させる代わりに、ステータスバーの両方のバージョンをインクルードタグ付きのframelayoutに追加しました。後でコードで私は可視性を切り替えるだけです。 – Dirk

+0

そのようにすることもできますが、必要なレイアウトをプログラムで拡張することは、使用されていないレイアウトやビューを拡張する必要がないため、さらに最適化することができます。接続状態に変化がない場合と同様に、静的に追加された場合は両方のレイアウトが膨張します。しかし、それ以外の場合には、1つしか膨張しません。 Ofcourseはその最適化であり、必要に応じて採用することができます。もしあなたが好きなら答えを受け入れることができます。 :-) – GRK

1

あなたはViewAnimatorを使用しようとすることができます:

https://developer.android.com/reference/android/widget/ViewAnimator.html

あなたはより多くのレイアウトを定義し、メソッドを使用して簡単に切り替えていることができます:属性を変更する

viewAnimator.showNext(); 
viewAnimator.showPrevious(); 
viewAnimator.setDisplayedChild(...); 
0

が好ましいway.Forすべての条件私たちです異なるレイアウトを作成してからそのレイアウトを組み込むためのアクティビティを再開しないでください。

+0

しかし、 "2"のステータスバーには、完全に異なる要素(ラベルなど)が含まれている必要がありますか?接続状態ですべてを表示/非表示にする必要がありますか? – Dirk

+0

1つのレイアウトファイルに2つのステータスバーを作成し、状況に応じてその親レイアウトを表示/非表示にします。すべてのラベル/ビューを表示/非表示にする必要はありません –

関連する問題