Androidベースのinflaterを使用してダイナミックロードレイアウトを実現
3397 ワード
一、動的ロードと静的ロードの違い
1、動的ロードは最適化であり、資源の消耗を低減する.たまに、レイアウトには複雑ですが、あまり使われていないコントロールがあります.メッセージの詳細、進捗バー、または未完了のプロンプト情報にかかわらず、本当に必要なときにロードしてメモリ消費を低減し、レンダリング効率を向上させることができます.
2、ダイナミックレイアウト、つまり業務のニーズに応じてインタフェースを変えることができる.実際にはコードでインタフェースを書き、コード量が大きい.しかもメンテナンスが非常に煩雑です.特にインタフェース空間が多い場合.静的レイアウトはxmlで実現され,ページが比較的固定されている場合に適している.しかし、メンテナンスが便利です.
二、inflaterを用いて動的ロードレイアウトを実現する
1、Activity、FragmentなどでgetLayoutInflater()を入手できる
2、AdapterでgetLayoutInflater()を取得できず、コンテキストで取得する
三、レイアウトにコンポーネントを動的に追加する
1、例1
2、例2
3、例3
1、動的ロードは最適化であり、資源の消耗を低減する.たまに、レイアウトには複雑ですが、あまり使われていないコントロールがあります.メッセージの詳細、進捗バー、または未完了のプロンプト情報にかかわらず、本当に必要なときにロードしてメモリ消費を低減し、レンダリング効率を向上させることができます.
2、ダイナミックレイアウト、つまり業務のニーズに応じてインタフェースを変えることができる.実際にはコードでインタフェースを書き、コード量が大きい.しかもメンテナンスが非常に煩雑です.特にインタフェース空間が多い場合.静的レイアウトはxmlで実現され,ページが比較的固定されている場合に適している.しかし、メンテナンスが便利です.
二、inflaterを用いて動的ロードレイアウトを実現する
1、Activity、FragmentなどでgetLayoutInflater()を入手できる
LayoutInflater _inflater = getLayoutInflater();
View _view = _inflater.inflate(R.layout.activity_main, null);
setContentView(_view);
2、AdapterでgetLayoutInflater()を取得できず、コンテキストで取得する
LayoutInflater _inflater = LayoutInflater.from(mContext);
View view = _inflater.inflate(R.layout.activity_main, null);
setContentView(_view);
三、レイアウトにコンポーネントを動的に追加する
1、例1
// 1、
FrameLayout _frameLayout = (FrameLayout) findViewById(R.id.flyt_main);
// 2、 ,
final Button _button = new Button(this);
_button.setText(" TwoActivity");
// 3、 ,
_frameLayout.addView(_button,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
2、例2
// 1、
FrameLayout _frameLayout = new FrameLayout(this);
// 2、 ,
final Button _button = new Button(this);
_button.setText(" TwoActivity");
// 3、 ,
_frameLayout.addView(_button,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
// 4、 Window.setContentView()
setContentView(_frameLayout);
3、例3
protected void AppendMainBody(int pResID) {
// 1、
LinearLayout _mainBody = (LinearLayout) findViewById(R.id.llyt_main_body);
// 2、 ,
View _view = LayoutInflater.from(this).inflate(pResID,null);
// 3、 ,
_mainBody.addView(_view, RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
}