Android LinearLayout 分隔符,但百分比?

Android LinearLayout divider, but percentage?

在 happy.xml 我有一个 LinearLayout...

<LinearLayout
    android:orientation="vertical"
    android:divider="@drawable/happy_spacer"
    android:showDividers="middle"
    ...>

这是文件 happy_spacer.xml...

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:height="8dp" />
    <solid android:color="#90909090" />
</shape>

太棒了,垫片高 8dp。

但是在响应式世界中你不能再那样工作了,间隔符的高度必须是它所在页面高度的一定百分比。

(或者,它必须 - 比如说 - 与 happy.xml 上其他东西的高度相关。)

Android 解决方案是什么?

(重要 - 正如 Charuka 在下面解释的那样,在这种情况下你几乎肯定想要 "px" 物理像素,而不是 dp 或 dip。)

对于现代 Android,仅限 apk 21 转发。

通常,至少根据我的经验,列表项分隔线 静态高度。无论如何,我认为您不能使用 XML 使其成为屏幕高度的百分比,但您可以通过编程方式使用 setDividerHeight();虽然你必须自己根据百分比计算大小。

否则,您可以根据具体情况调整大小break points by using resource qualifiers;例如h720dp(最小高度720dp)或w600dp(最小宽度600dp)。

使用configuration qualifiers并提供不同的维度:

例如

// happy_spacer.xml
<size android:height="@dimen/divider" />

// values/dimens.xml
<dimen name="divider">8dp</dimen>

// values-w720dp/dimens.xml
<dimen name="divider">16dp</dimen>

// values-w820dp/dimens.xml
<dimen name="divider">24dp</dimen>

同意 ,如果您在列表项中使用 divider,则可以使用 setDividerHeight() 方法。但是如果你直接在 LinearLayout 中使用你的分隔线,你只有 linearLayout.setDividerDrawable();

注:

您应该使用 8px 而不是 8dp 或 8dip,如果您使用 dp 或 dip Android 将根据设备缩小它 dpi.So 它会根据响应世界中的设备而有所变化; ) 看起来有点难看。因此,要提出真正的问题,您应该在 px 值中使用高度,该值对于任何屏幕都是清晰且相同的尺寸...。