7

我想实现以下目标:

在此处输入图像描述

它适用于以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_weight="3"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <fragment 
            android:name="com.bobjohn.DetailsMenuFragment"
            android:id="@+id/detailsMenuFragment"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="6"
            />

        <fragment 
            android:name="com.bobjohn.SummaryFragment"
            android:id="@+id/summaryFragment"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_margin="10dp"
            android:layout_weight="4"/>
    </LinearLayout>

    <TextView 
        android:layout_width="0dp"
        android:layout_weight="7"
        android:layout_height="fill_parent"
        android:text="Test Text"/>
</LinearLayout>

但是,我收到有关嵌套权重不利于性能的警告。我理解这个错误,但我不知道如何用另一种方式表达这个布局。什么是替代方案?

4

3 回答 3

7

支持库中有新的更新,请也检查已接受的答案。

更新答案:-

每当您创建任何视图时,它都会调用它的测量事件来了解屏幕上视图的高度宽度,如果您不使用 WRAP_CONTENT 或 FILL_PARENT 或 FIXEDSIZE 并使用权重,那么在屏幕上呈现布局会变得更加复杂。

方法,

首先,您的主布局被渲染并将其称为度量。然后根据权重,所有子视图递归地调用它的度量事件,因此它会消耗更多的时间来加载。

因此,应避免嵌套 weights

替代嵌套权重:-

您应该考虑使用针对不同尺寸的不同布局和可绘制文件夹。用特定的高度-宽度在 XML 中编写您的视图,或者将其设置为 wrap_content 并使用特定的背景图像,或者将其设置为 fill_parent。

我相信,作为开发人员,我们可能会多次出错,但作为 Android (Lint) 的创建者,他们可能只会在极少数情况下出错,应该听取这些警告以使您的代码更好。


下面的答案是在缺乏关于安卓布局的知识的情况下写的

AFAIK,我认为你做得对,这是最好的 XML 编写。您已经完美地使用了 weight 属性,因为它应该被使用。你只是忽略警告。

什么是替代方案?

我在我的项目中以相同的方式对我的所有 XML 进行了编码,所以这对我来说是最好的选择,所以我认为没有任何其他替代方法可以对 XML 进行编码以获得这样的布局,除非你使用RelativeLayout 一些作为父布局子视图的固定尺寸高度和宽度。我仍然建议您保持原样。


我会删除这个答案,因为我仍然不完全了解 Android 布局,但会保留它以接收基于此的新评论和答案

于 2012-06-28T09:32:43.690 回答
3

LinearLayout weight是的,我们有android嵌套的替代方案percent support library

代码和概念在这里!

GitHub 项目在这里!

考虑这个简单的布局,我完全避免了重量属性LinearLayout

百分比支持库

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/fifty_huntv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#ff7acfff"
        android:text="20% - 50%"
        android:textColor="@android:color/white"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="50%" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_toRightOf="@id/fifty_huntv"
        android:background="#ffff5566"
        android:text="80%-50%"
        app:layout_heightPercent="80%"
        app:layout_widthPercent="50%"
        />

</android.support.percent.PercentRelativeLayout>

非常棒 !!!

于 2015-09-06T07:36:04.617 回答
0

我认为(我可能会为此感到愤怒),但我再次认为我的手机有一个四核处理器,可以与大多数人的家用电脑相媲美(如果不是完全摧毁的话)。

我也认为这种硬件能力是手机的未来。

所以我得出一个结论,只要你不被嵌套冲昏头脑(在 MHO 中,布局的深度不应该超过 4 层,如果是你可能做错了),你的手机就不会在意关于有重量。

您可以做很多事情,这将对性能产生更深远的影响,然后担心您的处理器会做一些额外的数学运算。

(请注意,我有点幽默,所以不要对这篇文章太认真,除了你应该首先优化其他东西的想法,担心 2-3 级深度权重没有帮助你的健康)

于 2013-08-08T22:27:20.870 回答