layout_weight和使用dp有什么区别?

时间:2013-07-25 16:13:43

标签: android android-layout

我想创建一个可扩展的视图。

我应该更喜欢使用线性布局属性:layout_weight

或使用layout_width:X dp? (它也是相对的,而不是像像素那样的绝对)

有什么区别?

6 个答案:

答案 0 :(得分:2)

这在很大程度上取决于确切的用例。

layout_weight取决于同一ViewGroup中其他视图的数量和大小。

dp (density-independant pixels)取决于设备的密度。

通常,dp用于在具有不同屏幕密度的设备上以相同的物理大小显示视图,而权重只是确保视图填充其父ViewGroup的特定百分比。

答案 1 :(得分:1)

据我所知,dp只是你想要一个物体的一般尺寸,而重量是相对于共享相同空间的其他东西定义你想要多少空间。

答案 2 :(得分:1)

当您希望某些视图占用可用空间的三分之一(1/3)时,可以更轻松地创建布局。你会如何通过layout_width实现这一目标?但是,您可以使用权重属性轻松实现此目的。

更重要的属性使你的布局看起来在所有屏幕尺寸上都相同,甚至是平板电脑。当您使用权重属性时并非如此,通常情况下,您将为平板电脑开发一个单独的布局(我不是说您应该这样做,我只是想指出差异)。

答案 3 :(得分:1)

layout_widthlayout_height指定小部件的这两个维度。您可以使用dp值以与设备无关的方式提供大小“

layout_weight表示如何在LinearLayout中分配任何额外空格。这意味着如果orientation设置为horizontal,则LinearLayout将修改其包含的小部件的宽度。另一方面,如果orientation设置为vertical,则LinearLayout将修改子窗口小部件的高度。

Overrall,layout_widthlayout_weight有不同的目的,因此询问“我应该选择哪个”是不恰当的。在垂直LinearLayout中,您可以轻松使用它们。

答案 4 :(得分:1)

DP并不是真正相对的,它只是一个与密度无关的像素(因为平板电脑/手机屏幕具有不同的像素密度)。

您可以使用layout_weight将控件缩放到例如屏幕的1/3,无论屏幕有多小/大。

说你有:

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal">

    <View
            android:layout_width="20dp"
            android:layout_height="wrap_content"/>

    <View
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"/>

    <View
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
</LinearLayout>

第一项在所有不同设备上的宽度始终相同,第二项将填充剩余空间的2/3,第三项将剩余1/3。

这完全取决于你想如何使你的布局可扩展(ui的哪些部分应该增长/缩小,哪些部分应该保持相同的大小)。

答案 5 :(得分:1)

首先,android:layout_weight属性与dp之间没有任何关系。

  • dp(与密度无关的像素)基本上是一种度量单位。

      

    基于屏幕物理密度的抽象单位。   这些单位相对于160 dpi(每英寸点数)的屏幕,1dp大约等于1px。

    要计算像素和密度点,您可以采用以下公式。

    px = dp * (metrics.densityDpi / 160f);

    您可以通过Android查看here所有支持的维度。

  • android:layout_weight定义父布局中每个视图的“权重”。

    E.g。您的LinearLayout包含TextViewListView,其权重分别为.25和.75。这意味着您的TextView可以使用屏幕中25%的可用空间,ListView可以使用其他75%的空间。

    确保总重量的总和等于1(100%)。