试图正确调整android布局的大小

时间:2017-05-17 13:33:11

标签: android android-layout android-xml

我正在努力进行布局管理,所以我决定在这里问一下。 我希望以某种方式使用3种布局。 我有3个视图垂直分派到RelativeLayout(我们称之为VTop,VMiddle和VBottom)。

VBottom是一个Button,我希望他与屏幕底部保持对齐,不要移动或调整大小(实际工作)。

VMiddle是一个滚动视图。我希望这个ScrollView能够在底部按钮(VBottom)和最顶层布局(VTop)之间占据所有可能的位置,但绝不会让它的高度低于特定大小。

我希望VTop(包含一些TextViews和其他东西的线性布局)包装其所有内容,只要VMiddle不会小于其最小尺寸。

实际上我的代码几乎可以工作,但是当我向VMiddle中填充太多内容时,它会继续向屏幕顶部增长,而VTop完全消失。如果VTop没有足够的空间来包装他的内容,我希望VMiddle保持最小尺寸。

Problem Schema

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relativeLayout1">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1" <!-- VTop -->
        android:layout_above="@+id/eventDetail_RateLayout"
        android:layout_alignParentTop="true"
        android:layout_margin="10sp"> <!-- LOT OF VIEWS, NEED TO BE WRAPPED AS MUCH AS POSSIBLE --> 
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="100px"
        android:id="@+id/eventDetail_RateLayout" <!-- Not visible for now, you can ignore it -->
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:minWidth="25px"
        android:minHeight="25px"
        android:background="@color/common_google_signin_btn_text_light_default"
        android:layout_above="@+id/eventDetail_CommentScrollView"
        android:visibility="gone" />
    <ScrollView
        android:id="@+id/eventDetail_CommentScrollView" <!-- VMiddle -->
        android:background="#4D4A58"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/eventDetail_commentButton">
        <LinearLayout
            android:orientation="vertical"
            android:minWidth="25px"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/eventDetail_CommentLayout" />
    </ScrollView>
    <Button
        android:text="commenter"
        android:id="@+id/eventDetail_commentButton" <!-- VMiddle, this one is doing ok -->
        android:background="#666"
        android:textColor="#f8f8f8"
        android:layout_width="match_parent"
        android:layout_height="30sp"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

感谢您的回答。

6 个答案:

答案 0 :(得分:0)

请为knitr -

尝试以下代码
ScrollView

答案 1 :(得分:0)

使用此功能,但是使用线性布局并使用weight和weightSum属性可以轻松实现所需的UI类型..还可以相应地重命名布局和视图的ID

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/topLayout"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:background="#70AD47"
        android:orientation="vertical">

    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/btnBottom"
        android:layout_below="@+id/topLayout"
        android:background="#ED7D31"
        android:minHeight="400dp">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        </LinearLayout>

    </ScrollView>

    <Button
        android:id="@+id/btnBottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#4472C4"
        android:text="Bottom button" />


</RelativeLayout>

答案 2 :(得分:0)

1。将属性android:layout_below="@id/linearLayout1"android:layout_above="@id/eventDetail_commentButton"添加到ScrollView以使其保持在中间位置。

2. 尽管没有必要,但使用ScrollView及其子LinearLayout身高android:layout_width="match_parent"

无论topbottom布局有多大,中间scrollview将始终填充中间的自由空间。它绝不会更改heighttop布局的bottom

以下是工作布局:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relativeLayout1">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1"
        android:layout_alignParentTop="true"
        android:layout_margin="10sp">

    </LinearLayout>

    <Button
        android:text="commenter"
        android:id="@+id/eventDetail_commentButton"
        android:background="#666"
        android:textColor="#f8f8f8"
        android:layout_width="match_parent"
        android:layout_height="30sp"
        android:layout_alignParentBottom="true" />

    <ScrollView
        android:id="@+id/eventDetail_CommentScrollView"
        android:background="#4D4A58"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/linearLayout1"
        android:layout_above="@id/eventDetail_commentButton">

        <LinearLayout
            android:orientation="vertical"
            android:minWidth="25px"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/eventDetail_CommentLayout" />
    </ScrollView>

</RelativeLayout>

希望这会有所帮助〜

答案 3 :(得分:0)

使用android:layout_below =&#34; @ + id / linearlayout1&#34; 在eventDetail_RateLayout

答案 4 :(得分:0)

我非常确定这些答案都没有达到您所寻找的目标。你想做的事情并不简单,因为它涉及循环依赖:你基本上希望你的vTop视图包裹并填充vMiddle视图(android:layout_above="@id/vMiddle")留下的任何空间您希望vMiddle视图换行并填充vTop视图(android:layout_below="@id/vTop")留下的任何空格的时间。 我能想象的唯一解决方案是以编程方式检查和设置视图大小,我不认为这只能通过重新排列布局来实现。

答案 5 :(得分:0)

我终于实现了接近我想要的东西。我将layout_above和below结合起来,通过使Huge TextView可滚动来修复VTop的大小。我现在有一个固定大小的VTop和VBottom,而VMiddle占据了中心的其余部分。

感谢您的快速回答:)