1

我正在尝试为多种屏幕尺寸/密度/等进行设计。我认为“dp”是我的答案,但它并没有像我想象的那样工作。

这是我正在尝试做的事情:

对于保持静态的菜单项,我有一个页眉和页脚部分。然后我在 2 之间有一个 ScrollView。在 ScrollView 中有几个显示各种信息的“块”。我希望这些块始终扩展到屏幕的整个宽度。我希望这些块的高度简单地适当缩放以保持适当的 1:1 -> height:width 比例。我还希望 TextViews/Images/Buttons/etc 缩放并保持它们在块内的位置。如果 Blocks 的高度对于屏幕来说太大了,这就是 ScrollView 的用武之地。如果它们正好合适,那也没关系。我主要想缩放到宽度并让用户在必要时滚动。

目前,如果屏幕变宽,块会变得非常宽,但不会缩放高度以匹配它们。

这是我的 XML 布局代码的基本(为了便于阅读而进行了简化)概要。另请注意,每个块的大小可能不同。我不是在寻找“占 25%”的解决方案。这些块在其中具有相当复杂且完全不同的布局。

<LinearLayout>
    <RelativeLayout>Header stuff</RelativeLayout>

    <ScrollView> //height and width = match_parent width lower priority than header/footer

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="???" //Had been using a specified "dp" value but that didn't work like I thought. What goes here?
        >
                Block#1 with lots of TextViews, ImageViews and Buttons...etc
        </RelativeLAyout>

        <RelativeLayout>
                Block#2
        </RelativeLAyout>

        <RelativeLayout>
                Block#3... etc
        </RelativeLAyout>

    </ScrollView>

    <RelativeLayout>Footer stuff</RelativeLayout>

</LinearLayout>
4

1 回答 1

0

实现视图“完美”1:1 比例(或其他预定义比例)的一种方法是创建它的自定义扩展并覆盖该onMeasure()方法。在你的情况下,你可能想要一个看起来像这样SquareRelativeLayout的方法:onMeasure()

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width, width);
}

编辑:如果你想要一个自定义比率,你可以在某个地方定义它并像这样测量你的视图:

float ratio = 0.5f;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width, ratio*width);
}

如果您知道如何创建自己的 xml 属性,则可以添加ratio属性并从那里获取它,这意味着您不必为每个不同的比率创建新视图。

于 2012-04-14T19:13:19.997 回答