6

XML ファイル ( base_layout.xml) で定義されたレイアウトがあります。このファイルには、3 ~ 5 個のビューを含む などの 3 ~ 5 個の他のビューに加えて、20 以上の定義が含まれる場合がありViewStubます。ImageViewLinearLayoutImageButton

ViewStubこのレイアウト ファイルに配置するビューの数を気にする必要がありますか?

私はdeveloper.androidサイトで読みました:

ViewStub は、ダムで軽量なビューです。次元がなく、何も描画せず、レイアウトにはまったく関与しません。これは、ViewStub の膨張とビュー階層への保持が非常に安価であることを意味します。

20個以上持ってて安いの?もちろん、すべてが膨らんでいるわけではなく、一度に1〜2個だけです。

私が言っcheap enoughたり話したりするときconcerned、私はUIのパフォーマンスについてです

編集: 私が達成しようとしていること:すべてのアクティビティのスケルトンとなるレイアウト XML ファイルを作成します。それぞれで、アクティビティのレイアウトでActivity正しいものを膨らませます。ViewStub同じ骨格を必要とするアクティビティが非常に多いため、可能な限り再利用したい

私は、Activity私の活動のほとんどすべての親であるクラスを持っています。この親クラスは を呼び出しますsetContentView(R.layout.base_layout);。子アクティビティごとに、対応するViewStubinsideを膨らませるだけbase_layout.xmlです。これにより、すべてのアクティビティ レイアウトで使用されているのと同じスケルトン ビューを使用して、非常にカスタマイズされた UI を持つことができます。

4

2 に答える 2

15

大きなパフォーマンス ヒットは見られないと思います。最初から全部膨らませるよりはまだ安いです。

非常に多くのスタブを持つことの欠点は、設計全体を見失う可能性があることです。いくつかのビュー/アイテムを 1 つのビューグループにグループ化する方が理にかなっているかもしれません。たぶん、あなたがやろうとしていることを説明し、それを実現するためのより良い方法があるかどうかを確認することができます

編集: まあ、さまざまなサブビューを含む複数の ViewStubs の代わりに

<ViewStub android:id="@+id/stub"
           android:inflatedId="@+id/activity1"
           android:layout="@layout/myActivity1"
           />
<ViewStub android:id="@+id/stub2"
           android:inflatedId="@+id/activity2"
           android:layout="@layout/myActivity2"
           />

ViewStub を 1 つだけ用意し、アクティビティで onCreate() のようなことを行います

setContentView(R.layout.base_layout);
ViewStub stub = (ViewStub)findViewById(R.id.stub);

stub.setInflateId(R.id.activity1);
stub.setLayoutResource(R.layout.myActivity2);
stub.inflate();

この方法では、base_layout に ViewStub が 1 つしかなく、インフレートする前にコードでセットアップできます。

于 2010-10-08T19:46:11.200 に答える
0

LinearLayoutまたはRelativeLayoutViewGroupの拡張です

だから私はViewGroupをパラメーターとして使用しました これが私の解決策です

public CategoryViewController(Context context, ViewGroup containerView) {
        this.context = context;
        LayoutInflater inflater = LayoutInflater.from(context);
        View categoryLayout = inflater.inflate(R.layout.category_section, null, false);
        containerView.addView(categoryLayout);
        this.categoryView = categoryLayout;
}
于 2016-05-14T13:21:52.423 に答える