2015-09-17 70 views
0

看起来,在相对布局(需要充气ListView)中使用layout_weight在低CPU电话中相当沉重。Android布局优化,避免layout_weight

我该如何优化这种布局?

指定每个小部件的最小宽度和高度有多重要?

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:minWidth="25px" 
    android:minHeight="25px"> 
<LinearLayout 
    android:orientation="horizontal" 
    android:minWidth="25px" 
    android:minHeight="25px" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/LLHFila" 
    android:padding="8dp"> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/cmdReducir" 
     android:layout_weight="0.25" 
     android:background="@null" 
     android:src="@drawable/minus50px" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/LLVProducto" 
     android:layout_weight="3"> 
     <TextView 
      android:text="Long Description Title" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblProducto" /> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/LLHmontos"> 
      <TextView 
       android:text="Amount" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/lblCantidad" 
       android:layout_weight="1" /> 
      <TextView 
       android:text="Price" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/lblImporte" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:layout_weight="1" /> 
     </LinearLayout> 
    </LinearLayout> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/cmdAumentar" 
     android:layout_weight="0.25" 
     android:background="@null" 
     android:src="@drawable/plus50px" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" /> 
</LinearLayout> 

+0

拍摄地点是列表视图? –

+0

这只是后来被用来创建ListView的相对布局 – Mauricio

+0

在'RelativeLayout'中使用'layout_weight'没有意义。但是,使用嵌套布局的'layout_weight'可能会导致性能问题。 – Onik

回答

0

这基本上消除了所有的嵌套。正如@Onik所说,使用RelativeLayout的权重没有意义。

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dp"> 
<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/cmdReducir" 
    android:layout_weight="0.25" 
    android:background="@null" 
    android:src="@drawable/minus50px" 
    android:layout_alignParentLeft="true" /> 
<TextView 
    android:text="Long Description Title" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_height="wrap_content" 
    android:id="@+id/lblProducto" 
    android:layout_toRightOf="@+id/cmdReducir" 
    android:layout_width="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_toLeftOf="@+id/cmdAumentar" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" /> 
<TextView 
    android:text="Amount" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/lblCantidad" 
    android:layout_below="@+id/lblProducto" 
    android:layout_toRightOf="@+id/cmdReducir" 
    android:paddingLeft="5dp" /> 
<TextView 
    android:text="Price" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/lblImporte" 
    android:textStyle="bold" 
    android:layout_below="@+id/lblProducto" 
    android:layout_toLeftOf="@+id/cmdAumentar" 
    android:paddingRight="5dp" /> 
<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/cmdAumentar" 
    android:layout_weight="0.25" 
    android:background="@null" 
    android:src="@drawable/plus50px" 
    android:layout_alignParentRight="true" /> 

0

有由Android Percent Support Library

希望推出一个支持库,这个帮助你,因为这是非常有趣,每个人都在这个喜欢!

在这里你可以定义一个视图的宽度或高度的某些precent。它有两个预建布局 - PercentRelativeLayoutPercentFrameLayout

用途: 加入应用

compile 'com.android.support:percent:22.2.0' 

和XML的依赖的build.gradle

<android.support.percent.PercentRelativeLayout 

    xmlns:android="http://schemas.android.com/apk/res/android" 

    xmlns:app="http://schemas.android.com/apk/res-auto" 

    xmlns:tools="http://schemas.android.com/tools" 

    android:layout_width="match_parent" 

    android:layout_height="match_parent" 

    android:paddingBottom="@dimen/activity_vertical_margin" 

    android:paddingLeft="@dimen/activity_horizontal_margin" 

    android:paddingRight="@dimen/activity_horizontal_margin" 

    android:paddingTop="@dimen/activity_vertical_margin" 

    tools:context=".MainActivity"> 


    <Button 

    android:id="@+id/button" 

    android:text="Button" 

    android:layout_height="wrap_content" 

    android:layout_alignParentTop="true" 

    app:layout_widthPercent="30%"/> 


    <Button  

    android:id="@+id/button2" 

    android:text="Button 2" 

    android:layout_height="wrap_content" 

    android:layout_toRightOf="@id/button" 

    app:layout_widthPercent="60%"/> 


    <Button 

    android:id="@+id/button3" 

    android:text="Button 3" 

    android:layout_height="wrap_content" 

    android:layout_below="@+id/button" 

    android:layout_alignParentStart="true" 

    android:layout_alignParentLeft="true" 

    app:layout_widthPercent="90%"/> 


</android.support.percent.PercentRelativeLayout> 

此代码是从LINK