0

我有一个垂直的 LinearLayout,其中包含以下小部件显示在中心,LinearLayout 的重力设置为“中心”:

  • 图像视图
  • 文本输入布局
  • 文本输入布局
  • 按钮

当在较小的屏幕设备上时,这看起来很好,底部的按钮消失了。当我为两个 TextInputLayouts 都显示错误时,情况会变得更糟。

屏幕截图正常屏幕:

在普通屏幕上

截图小屏幕:

在小屏幕上

问题:

我想要的是在小屏幕上,ImageView 应该调整自身大小以适应所有视图,而在更大的屏幕上,ImageView 应该保持其最大可用大小,而所有内容都显示在中心(如屏幕截图 1 中所示)。

任何帮助将不胜感激!:)

源 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/input_view_margin"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/ic_transaction_history_big" />

    <TextView
        style="@style/ReportHeading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/txt_transaction_history" />

    <android.support.v4.widget.Space
        android:layout_width="wrap_content"
        android:layout_height="40dp" />

    <TextInputLayout
        android:id="@+id/wrapperFromDate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextInputEditText
            android:id="@+id/edtFromDate"
            style="@style/InputLayoutEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:hint="@string/hint_from_date" />
    </TextInputLayout>

    <TextInputLayout
        android:id="@+id/wrapperToDate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <TextInputEditText
            android:id="@+id/edtToDate"
            style="@style/InputLayoutEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:hint="@string/hint_to_date" />
    </TextInputLayout>

    <Button
        android:id="@+id/btnSubmit"
        style="@style/PrimaryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="35dp"
        android:text="@string/action_submit" />
</LinearLayout>
4

3 回答 3

0

用于ConstraintLayout“弹性视图”,因此您可以为元素设置灵活的约束。

PS:您可以在 android studio 中轻松测试您的实现,当您扩展时,在预览/设计中减小屏幕尺寸。

于 2017-09-13T09:28:58.793 回答
0

您可以像这样将 ScrollView 添加到您的 XML 中,以便用户能够看到您的按钮

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/input_view_margin"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/ic_transaction_history_big" />

    <TextView
        style="@style/ReportHeading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/txt_transaction_history" />

    <android.support.v4.widget.Space
        android:layout_width="wrap_content"
        android:layout_height="40dp" />

    <TextInputLayout
        android:id="@+id/wrapperFromDate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextInputEditText
            android:id="@+id/edtFromDate"
            style="@style/InputLayoutEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:hint="@string/hint_from_date" />
    </TextInputLayout>

    <TextInputLayout
        android:id="@+id/wrapperToDate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <TextInputEditText
            android:id="@+id/edtToDate"
            style="@style/InputLayoutEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:hint="@string/hint_to_date" />
    </TextInputLayout>

    <Button
        android:id="@+id/btnSubmit"
        style="@style/PrimaryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="35dp"
        android:text="@string/action_submit" />
</LinearLayout>
</ScrollView>
于 2017-03-16T11:03:29.327 回答
0

为您的视图赋予权重并设置宽度高度以匹配父布局的父级为子视图赋予权重。请记住将高度设置为 0dp,宽度也设置为 0dp,以便它可以根据重量进行调整。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/input_view_margin"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/ic_transaction_history_big" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <TextView
            style="@style/ReportHeading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/txt_transaction_history" />

        <android.support.v4.widget.Space
            android:layout_width="wrap_content"
            android:layout_height="40dp" />

        <TextInputLayout
            android:id="@+id/wrapperFromDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextInputEditText
                android:id="@+id/edtFromDate"
                style="@style/InputLayoutEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:hint="@string/hint_from_date" />
        </TextInputLayout>

        <TextInputLayout
            android:id="@+id/wrapperToDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp">

            <TextInputEditText
                android:id="@+id/edtToDate"
                style="@style/InputLayoutEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:hint="@string/hint_to_date" />
        </TextInputLayout>

        <Button
            android:id="@+id/btnSubmit"
            style="@style/PrimaryButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="35dp"
            android:text="@string/action_submit" />

    </LinearLayout>

</LinearLayout>

它将解决您的问题,请让我知道它是否有效。祝您好运!

于 2017-03-16T11:38:06.413 回答