使视图填补中间的空白,但为其底部兄弟留下空间

时间:2016-04-07 16:14:50

标签: android android-layout

嗨,我现在有点残忍。我认为这在Android XML中是可行的。

我想制作这样的布局:

enter image description here

问题在于并排的两个小元素。当我使视图#2与高度相匹配时,我期待它也会尊重其他兄弟的空间。我错了,但我现在明白了。当我将视图#2的layout_height设置为match_parent时,它占用剩余空间,视图#3和视图#4被放入最底部,并且在屏幕中不再可见。

我希望视图#2会在中间扩展,但仍然为视图#3和视图#4以及它下面的一些元素创建一些空间,而不是在下方推动。

这就是我现在正在做的事情:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:fitsSystemWindows="true"
    tools:context=".TaskActivity">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textinput_layout_note_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="16dp">

        <EditText
            android:id="@+id/edittext_task"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:singleLine="true"
            android:textSize="32sp"
            android:padding="8dp"
            android:hint="@string/edittext_task_title_hint"/>

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textinput_layout_note_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textinput_layout_note_title">

        <EditText
            android:id="@+id/edittext_todo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:maxLines="1"
            android:gravity="top"
            android:hint="@string/edittext_task_content_hint"/>

    </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textinput_layout_note_description"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/imagebutton_insert_note"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/ic_content_add_black"
            android:contentDescription="@string/content_description_choose_note"
            style="?android:attr/borderlessButtonStyle" />

        <ImageButton
            android:id="@+id/imagebutton_expand_note"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/ic_open_in_new_black_24dp"
            android:contentDescription="@string/content_description_expand_note"
            style="?android:attr/borderlessButtonStyle" />

    </LinearLayout>

</RelativeLayout>

我已经将LinearLayout与layout_weight结合使用,但由于我有一些同样需要权重的嵌套视图,因此速度越来越慢。我希望这是相对完成的。

我是如何实现这种布局的?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

我希望这是相对完成的。

RelativeLayout不是表现的灵丹妙药。

  

我是如何实现这种布局的?

尝试:

<RelativeLayout
    ...>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textinput_layout_note_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:paddingTop="16dp">

        ...

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textinput_layout_note_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textinput_layout_note_title"
        android:layout_above="@+id/whatever_this_thing_is"/>

       ...

    </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android:id="@id/whatever_this_thing_is"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

       ...

    </LinearLayout>

</RelativeLayout>

(其中...位用于您已有的内容,已移除以保持列表更短)

IOW:

  • 将顶部视图锚定到顶部
  • 将底部视图锚定到底部
  • 将中间视图固定在顶部下方和底部上方,使其伸展以填充中间空间

答案 1 :(得分:1)

尝试这种方法!,我没有在android studio中尝试过,但它应该可以解决这个问题。

ColorStateList