我想创建一个可扩展的视图。
我应该更喜欢使用线性布局属性:layout_weight
或使用layout_width:X dp? (它也是相对的,而不是像像素那样的绝对)
有什么区别?
答案 0 :(得分:2)
这在很大程度上取决于确切的用例。
layout_weight
取决于同一ViewGroup中其他视图的数量和大小。
dp (density-independant pixels)
取决于设备的密度。
通常,dp用于在具有不同屏幕密度的设备上以相同的物理大小显示视图,而权重只是确保视图填充其父ViewGroup的特定百分比。
答案 1 :(得分:1)
据我所知,dp只是你想要一个物体的一般尺寸,而重量是相对于共享相同空间的其他东西定义你想要多少空间。
答案 2 :(得分:1)
当您希望某些视图占用可用空间的三分之一(1/3)时,可以更轻松地创建布局。你会如何通过layout_width实现这一目标?但是,您可以使用权重属性轻松实现此目的。
更重要的属性使你的布局看起来在所有屏幕尺寸上都相同,甚至是平板电脑。当您使用权重属性时并非如此,通常情况下,您将为平板电脑开发一个单独的布局(我不是说您应该这样做,我只是想指出差异)。
答案 3 :(得分:1)
layout_width
和layout_height
指定小部件的这两个维度。您可以使用dp
值以与设备无关的方式提供大小“
layout_weight
表示如何在LinearLayout
中分配任何额外空格。这意味着如果orientation
设置为horizontal
,则LinearLayout
将修改其包含的小部件的宽度。另一方面,如果orientation
设置为vertical
,则LinearLayout
将修改子窗口小部件的高度。
Overrall,layout_width
和layout_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
包含TextView
和ListView
,其权重分别为.25和.75。这意味着您的TextView
可以使用屏幕中25%的可用空间,ListView
可以使用其他75%的空间。
确保总重量的总和等于1(100%)。