如何设置布局以适应屏幕上的剩余空间?

时间:2017-04-30 22:24:47

标签: android android-layout

我有一个由各种相对和线性布局组成的活动布局。前2个是顶部工具栏和具有固定大小的imageview。下面是一个由一排按钮和一个水平网格视图组成的布局。 我正在尝试通过调整大小来使按钮和gridview适合屏幕上的剩余空间。 我已尝试使用权重的相对和线性布局的各种组合,但没有任何效果,导致网格视图溢出屏幕的底部。 唯一有效的解决方案是使用按钮将固定数量设置为布局大小,但这不适用于不同尺寸的屏幕。

有什么想法吗?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg1"
android:fillViewport="true"
android:orientation="vertical"
tools:context="...">

<include
    android:id="@+id/top_toolbar_details"
    layout="@layout/toolbar" />

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

    <ImageView
        android:id="@+id/iv_view_illusion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:clickable="true"
        android:keepScreenOn="true"
        android:longClickable="true"
        android:scaleType="centerInside"
        android:src="@drawable/motion1" />

</LinearLayout>

<LinearLayout
    android:id="@+id/ll_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/ll_details">

    <LinearLayout
        android:id="@+id/rl_buttons"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/b_last_viewed"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_previous" />

        <ImageButton
            android:id="@+id/b_all_illusions"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="0dp"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:cropToPadding="false"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_grid" />

        <ImageButton
            android:id="@+id/b_to_favourites"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_favourite" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_horizontal_grid_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <android.support.v17.leanback.widget.HorizontalGridView
            android:id="@+id/gv_small_preview"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </LinearLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

你必须约束你的布局,

<LinearLayout
    android:id="@+id/ll_horizontal_grid_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/ll_bottom"
    android:layout_below"@id/ll_details"
    android:orientation="vertical">

    <android.support.v17.leanback.widget.HorizontalGridView
        android:id="@+id/gv_small_preview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</LinearLayout>

那就是说,你的布局相当复杂,你可能最好用ConstraintLayout替换root布局。

答案 1 :(得分:0)

试试这个

<LinearLayout
    android:id="@+id/ll_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/ll_details">

    <LinearLayout
        android:id="@+id/rl_buttons"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/b_last_viewed"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_previous" />

        <ImageButton
            android:id="@+id/b_all_illusions"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="0dp"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:cropToPadding="false"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_grid" />

        <ImageButton
            android:id="@+id/b_to_favourites"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/circle_shape_drawable"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_favourite" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_horizontal_grid_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <android.support.v17.leanback.widget.HorizontalGridView
             android:id="@+id/gv_small_preview"
             android:layout_width="wrap_content"
             android:layout_height="match_parent" />
    </LinearLayout>
</LinearLayout>