Android Layout Tricks #3: Optimize with stubs(Android 布局技巧3:使用stub最佳化)

來源:互聯網
上載者:User
30 March 2009

Android Layout Tricks #3: Optimize with stubs

http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.html

Sharing and reusing layouts is very easy with Android thanks to the
<include /> tag, sometimes even too easy and you might end up with user interfaces that contain a large number of views, some of which are rarely used. Thankfully, Android offers a very special widget called
ViewStub, which brings you all the benefits of the
<include /> without polluting your user interface with rarely used views.

A ViewStub is a dumb and lightweight view. It has no dimension, it does not draw anything and does not participate in the layout in any way. This means a
ViewStub is very cheap to inflate and very cheap to keep in a view hierarchy. A
ViewStub can be best described as a lazy include. The layout referenced by a
ViewStub is inflated and added to the user interface only when you decide so.

The following screenshot comes from the
Shelves application. The main purpose of the activity shown in the screenshot is to present the user with a browsable list of books:

The same activity is also used when the user adds or imports new books. During such an operation, Shelves shows extra bits of user interface. The screenshot below shows the progress bar and cancel button that appear at the bottom of the screen during an
import:

Because importing books is not a common operation, at least when compared to browsing the list of books, the import panel is originally represented by a
ViewStub:

When the user initiates the import process, the ViewStub is inflated and replaced by the content of the layout file it references:

To use a ViewStub all you need is to specify an android:id attribute, to later inflate the stub, and an
android:layout attribute, to reference what layout file to include and inflate. A stub lets you use a third attribute,
android:inflatedId, which can be used to override the id of the root of the included file. Finally, the layout parameters specified on the stub will be applied to the roof of the included layout. Here is an example:

<ViewStub  android:id="@+id/stub_import"  android:inflatedId="@+id/panel_import"  android:layout="@layout/progress_overlay"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_gravity="bottom" />

When you are ready to inflate the stub, simply invoke the
inflate() method. You can also simply change the visibility of the stub to
VISIBLE or
INVISIBLE and the stub will inflate. Note however that the inflate() method has the benefit of returning the root
View of the inflate layout:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);// orView importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

It is very important to remember that after the stub is inflated, the stub is
removed
from the view hierarchy. As such, it is unnecessary to keep a long-lived reference, for instance in an class instance field, to a
ViewStub.

A ViewStub is a great compromise between ease of programming and efficiency. Instead of inflating views manually and adding them at runtime to your view hierarchy, simply use a
ViewStub. It's cheap and easy. The only drawback of ViewStub is that it currently does
not support the
<merge /> tag.

Happy coding!

Posted byRomain Guyat2:00
PMLabels:How-to,Optimization,User
Interface

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.