Android Layout Tricks #3: Optimize with stubs(Android 布局技巧3:使用stub优化)
2012-08-21 11:25
253 查看
[title2]30 March 2009
[/title2]
Android Layout Tricks #3: Optimize with stubs
http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.htmlSharing 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
ViewStubis 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
ViewStubis very cheap to inflate and very cheap to keep in a view hierarchy. A
ViewStubcan be best described as a lazy include. The layout referenced by a
ViewStubis 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
ViewStubis inflated and replaced by the content of the layout file it references:
To use a
ViewStuball you need is to specify an
android:idattribute, to later inflate the stub, and an
android:layoutattribute, 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
Viewof the inflate layout:
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or View 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
ViewStubis 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
ViewStubis that it currently does
not support the
<merge /> tag.
Happy coding!
Posted byRomain Guyat2:00
PM
Labels:How-to,Optimization,User
Interface
相关文章推荐
- Android Layout Tricks #3: Optimize by merging(Android 布局技巧3:使用merge优化)
- Android Layout Tricks #3: Optimize with stubs
- Android布局优化技巧--<include>/<merge>/<viewStub>
- Android布局优化之ViewStub、include、merge使用与源码分析
- Android布局优化之Merge、Include、ViewStub使用与源码分析
- android开发之布局优化之include、ViewStub、merge使用与源码分析
- Android Layout Tricks #1(Android 布局技巧1)
- Android Layout Tricks #3: Optimize, Part 1
- Android布局优化之ViewStub、include、merge使用与源码分析
- Android布局优化之ViewStub、include、merge使用与源码分析
- 【Android布局】布局优化之ViewStub、include、merge使用与源码分析
- Android布局优化之<merge>与<ViewStub>标签使用
- Android Layout Tricks #3: Optimize by merging
- Android 性能优化 三 布局优化ViewStub标签的使用
- Android布局优化之Merge Include ViewStub使用与源码分析
- Android布局优化之Merge Include ViewStub使用与源码分析
- Android Layout Tricks #3: Optimize by merging
- Android布局优化之ViewStub、include、merge使用与源码分析
- Android布局优化技巧include、merge、stubView;LinearLayout和RelativeLayout的性能比较
- Android布局优化之ViewStub、include、merge使用与源码分析