我正在创建一个Android应用程序,它有一个超过(120多个视图)的特定屏幕(布局),它会生成警告:
"main.xml has more than 80 views, bad for performance"
我有很多TextViews
,EditTexts
,RadioButtons
组在26 TableRows
上组织。
我可以做些什么来提高应用程序性能并删除警告?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout00"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<TableRow
android:id="@+id/tableRow00"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:gravity="right" >
<Button
android:id="@+id/id_but_val"
android:layout_width="@dimen/button_width"
android:layout_height="wrap_content"
android:background="@drawable/button_colored"
android:text="@string/but_valid"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/id_but_up"
android:layout_width="@dimen/button_width"
android:layout_height="wrap_content"
android:background="@drawable/button_colored"
android:onClick="goToTop"
android:text="@string/but_ret_up"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/id_but_back"
android:layout_width="@dimen/button_width"
android:layout_height="wrap_content"
android:background="@drawable/button_colored"
android:text="@string/but_ret_back"
android:textAppearance="?android:attr/textAppearanceMedium" />
</TableRow>
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="true"
android:overScrollMode="always"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarStyle="outsideInset" >
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<TableRow
android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView01"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_84_obstacles_acces" />
<RadioGroup
android:id="@+id/RadioGroup01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/RadioButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_oui" />
<RadioButton
android:id="@+id/RadioButton02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_non" />
</RadioGroup>
</TableRow>
<TableRow
android:id="@+id/TableRow02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView02"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_85_limit_tonnage" />
<EditText
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:ems="@string/editTextEms"
android:inputType="numberDecimal" />
</TableRow>
<TableRow
android:id="@+id/TableRow03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top"
android:visibility="gone" >
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_86_derog" />
</TableRow>
<TableRow
android:id="@+id/TableRow04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView04"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_87_limit_hauteur" />
<EditText
android:id="@+id/EditText03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:ems="@string/editTextEms"
android:inputType="numberDecimal" />
</TableRow>
<TableRow
android:id="@+id/TableRow05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView05"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_88_limit_largeur" />
<EditText
android:id="@+id/EditText04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:ems="@string/editTextEms"
android:inputType="numberDecimal" />
</TableRow>
<TableRow
android:id="@+id/TableRow06"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView06"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_89_trav_jour" />
<RadioGroup
android:id="@+id/RadioGroup06"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/RadioButton11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_oui" />
<RadioButton
android:id="@+id/RadioButton12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_non" />
</RadioGroup>
</TableRow>
<TableRow
android:id="@+id/TableRow07"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView07"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_90_acces_intemperies" />
<RadioGroup
android:id="@+id/RadioGroup07"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/RadioButton13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_oui" />
<RadioButton
android:id="@+id/RadioButton14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_non" />
</RadioGroup>
</TableRow>
<TableRow
android:id="@+id/TableRow08"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView08"
android:layout_width="@dimen/label_width"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_91_acces_de_client" />
<RadioGroup
android:id="@+id/RadioGroup08"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/RadioButton15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_oui" />
<RadioButton
android:id="@+id/RadioButton16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_non" />
</RadioGroup>
</TableRow>
<LinearLayout
android:id="@+id/LinearLayout02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TableRow
android:id="@+id/TableRow09"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView09"
android:layout_width="@dimen/label_width"
android:layout_height="fill_parent"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_92_contraintes_reservoir" />
<EditText
android:id="@+id/EditText05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:ems="@string/editTextEms"
android:inputType="text" />
</TableRow>
<TableRow
android:id="@+id/TableRow10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/row_margin_top" >
<TextView
android:id="@+id/TextView10"
android:layout_width="@dimen/label_width"
android:layout_height="fill_parent"
android:layout_marginLeft="@dimen/view_left_margin"
android:text="@string/ecran3_93_dalle_pret" />
<RadioGroup
android:id="@+id/RadioGroup10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/view_left_margin"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/RadioButton19"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_oui" />
<RadioButton
android:id="@+id/RadioButton20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_value_non" />
</RadioGroup>
</TableRow>
<!-- TableRow10 to TableRow26 -->
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
答案 0 :(得分:2)
如果没有看到完整的布局,我会说用TableLayout
替换ListView
。
我猜你每行都有Views
个数,如果切换到ListView
,你就可以避免在内存中加载整个布局,而只需要加载ListView
屏幕上的可见行+除此之外的任何视图。
使用上述方法,您将能够从当前布局中删除大量行。
编辑:
根据您添加的布局,提供一些建议:
TableRow
可用作布局中的普通视图,但其主要目的是成为TableLayout
的子级。Buttons
的{{1}}具有相同的宽度,那么您可以进行小幅改进而不是当前的布局,将tableRow00
替换为{{1}移除LinearLayout00
,然后使用RelativeLayout
的规则放置tableRow00
和Buttons
。ScrollView
替换为RelativeLayout
。LinearLayout01
(我猜你的所有行都是一样的?!)但你应该删除它并直接附加TableLayout
- {{1} } LinearLayout02
。