Androidベースのinflaterを使用してダイナミックロードレイアウトを実現

3397 ワード

一、動的ロードと静的ロードの違い
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);
    }