Android LinearLayout分频器,但百分比?

时间:2016-12-13 15:43:04

标签: android android-linearlayout xml-layout

在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在下面解释的那样,在这种情况下,你几乎肯定想要&#34; px&#34;物理像素,而不是dp或dip。)

对于现代Android,仅限apk 21前进。

3 个答案:

答案 0 :(得分:4)

通常,至少根据我的经验,列表项目分隔符静态高度。在任何情况下,我认为您不能使用XML将其设置为屏幕高度的百分比,但您可以使用setDividerHeight()以编程方式进行编程;虽然你必须自己根据百分比来计算尺寸。

否则,您可以使用break points根据具体的resource qualifiers调整尺寸;例如h720dp(最小高度为720dp)或w600dp(最小宽度为600dp)。

答案 1 :(得分:2)

使用configuration qualifiers并提供不同的尺寸:

e.g。

// 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>

答案 2 :(得分:1)

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

注意:

你应该使用8px而不是8dp或8dip,如果你使用dp或dip,Android将根据设备dpi缩小它。因此它会根据响应世界中的设备而改变一点;)看起来有点难看。因此,要拥有您的真实问题,您应该使用px中的高度值,该值对于任何屏幕都是明确且相同的大小....