0

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

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

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

有什么不同?

4

6 回答 6

2

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

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

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

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

于 2013-07-25T16:39:19.493 回答
1

我的理解是 dp 只是您想要一个对象的一般大小,而 weight 定义了您希望某物相对于共享相同空间的其他事物占用多少空间。

于 2013-07-25T16:17:05.387 回答
1

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

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

于 2013-07-25T16:21:05.397 回答
1

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

layout_weight指示如何在 a 中分配任何额外的空间LinearLayout。这意味着如果orientation设置为horizontalLinearLayout将修改它包含的小部件的宽度。另一方面,如果orientation设置为verticalLinearLayout则会修改子小部件的高度。

总体来说,layout_widthlayout_weight不同的目的,所以问“我应该更喜欢哪个”是不恰当的。在垂直LinearLayout中,您可以轻松地同时使用两者。

于 2013-07-25T16:39:29.460 回答
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。

这完全取决于您希望如何使您的布局可扩展(用户界面的哪些部分应该增长/缩小,哪些应该保持相同的大小)。

于 2013-07-25T16:41:24.033 回答
1

android:layout_weight首先,财产和财产没有关系dp

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

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

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

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

    您可以在此处查看Android 支持的所有尺寸。

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

    例如,您有一个LinearLayout包含 aTextViewListView它们的权重分别为 0.25 和 0.75。这意味着您TextView可以使用屏幕上 25% 的可用空间和ListView另外 75% 的可用空间。

    最后,确保总权重之和等于 1 (100%)。

于 2013-07-25T16:55:14.637 回答