Android佈局優化

Android佈局優化 html

 

•       1、優化佈局層次結構 android

•       避免佈局嵌套,此外幾個嵌套的LinearLayout實例使用layout_weight參數會致使兩次測量,特別是重複的添加,好比ListView、GridView。避免layout_weight sql

•       一、檢查你的佈局 網絡

•       經過tools/hierarchyviewer.bat找到佈局性能瓶頸。 app

 




•       二、修改你的佈局 佈局

Measure: 0.598ms 性能

Layout: 0.110ms 優化

Draw: 2.146ms 線程

•       三、使用Lint檢查(幾個例子) xml

•       LinearLayout保護一個imageview和textView可使用一個控件來實現。 textView屬性android:drawableLeft="@drawable/up「

•       如根標籤僅做爲跟佈局(無背景等),使用<merge>替代。在代碼中inflate一個以merge爲根元素的佈局文件時候,你須要指定一個ViewGroup 做爲其容器,而且要設置attachToRoot 爲true

•       刪除沒子控件、沒背景的佈局

•       若是一個layout只有子控件,沒有兄弟控件,而且不是一個ScrollView或者根節點,並且沒有設置背景,那麼咱們能夠移除這個父控件,直接把子控件提高爲父控件。

•       儘可能減小內嵌的層級,考慮使用更多平級的組件 RelativeLayout or GridLayout來提高佈局性能,默認最大的深度是10

•       2、複用佈局<include/>

•       建立可重用的layout組件

•       使用定義的組件<includelayout="@layout/titlebar"/>

•       <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width=」match_parent」android:layout_height="wrap_content"android:background="@color/titlebar_bg"> <ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/gafricalogo" /> </FrameLayout>

•       <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width=」match_parent」android:layout_height=」match_parent」android:background="@color/app_bg"android:gravity="center_horizontal"><includelayout="@layout/titlebar"/> <TextViewandroid:layout_width=」match_parent」android:layout_height="wrap_content"android:text="@string/hello" android:padding="10dp"/>  </LinearLayout>

•       <include android:id=」@+id/news_title」android:layout_width=」match_parent」 android:layout_height=」match_parent」layout=」@layout/title」/>

 

•       使用merge標籤減小無用的佈局

•       <merge xmlns:android="http://schemas.android.com/apk/res/android">  

•         

•           <Button  

•               android:layout_width="fill_parent"   

•               android:layout_height="wrap_content"  

•               android:text="@string/add"/>  

•         

•           <Button  

•               android:layout_width="fill_parent"   

•               android:layout_height="wrap_content"  

•               android:text="@string/delete"/>  

•         

•       </merge>

 

•       3、動態加載視圖

•       有時候咱們須要複雜的視圖且少用,咱們能夠按須要的時候裝載以便減小內存,提升體驗。原來咱們都是設置在佈局中,而後使用View.GONE屬性,可是好資源影響性能。ViewStub是一個輕量級的View,它一個看不見的,不佔佈局位置,佔用資源很是小的控件

•       定義ViewStub

<ViewStubandroid: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" />

•       裝載佈局

((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or ViewimportPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

Inflate只能訪問一次,經過inflatedId找到佈局。

缺點:使用的佈局不支持 <merge/>

 

•       4、平滑滾動ListView

•       一、使用後臺線程操做IO/網絡/sql Access

•       二、爲了在listView中減小findView操做,把row設置成ViewHolder

static class ViewHolder {  

  TextView text;  

  TextView timestamp;  

  ImageView icon;  

  ProgressBar progress;  

  int position;  

}  

相關文章
相關標籤/搜索