Android布局优化,避免layout_weight



看起来,在相对布局中使用layout_weight(需要膨胀ListView)在低cpu手机中是相当沉重的。

我如何优化这个布局?

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

    <?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>

这基本上消除了所有嵌套。正如@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" />

android引入了一个百分比支持库

希望这对你有帮助,因为这是非常有趣的,每个人都喜欢这个!

在这里你可以定义一个视图的宽度或高度的百分比。它有两个预先构建的布局- PercentRelativeLayoutPercentFrameLayout

使用:在构建中添加依赖项。Gradle of app

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

和XML中的

<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

最新更新