将所有布局元素缩放以适应横向模式。

3

我有一个活动布局,定义如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:padding="0dp"
    android:gravity="center">

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/tv_example"
                android:textSize="45sp"
                android:textStyle="bold"
                android:textAlignment="center"
                android:maxLines="2"
                android:ellipsize="end"
                android:padding="5dp"
                android:background="@color/transparent">
            </TextView>

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:inputType="number"
                android:text="@string/tv_example"
                android:textSize="40sp"
                android:textStyle="bold|italic"
                android:textAlignment="center"
                android:maxLines="1"
                android:ellipsize="end"
                android:padding="5dp"
                android:background="@color/transparent">
            </EditText>
        </LinearLayout>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            android:maxHeight="150dp"
            android:maxWidth="150dp"
            android:src="@mipmap/ic_launcher"
            android:padding="15dp"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"/>

        <Button
            android:id="@+id/button_item_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            android:alpha="0.3"
            android:clickable="false"
            android:ellipsize="end"
            android:padding="15dp"
            android:layout_margin="50dp"
            android:text="@string/button_edit"
            android:textAlignment="center"
            android:textSize="25sp"/>
    </LinearLayout>
</RelativeLayout>

在竖屏模式下,会产生以下效果:

[portrait mode[1]

但是,在切换到横屏模式时,按钮会消失:

landscape mode

我该如何使缺失的TextView在横屏模式下出现?或者更好的方法是 - 缩放所有项目以适应新的方向?

基本上,文本视图是重要的视图 - 我希望它们可见,即使以缩小Button和/或ImageView为代价。

我尝试从包含TextView的最内部LinearLayout中删除android:layout_weight="1"行 -

这样可以使文本在横屏模式下出现,但会使Button消失:

(它还会使整个布局在竖屏模式下与屏幕顶部对齐,而不是居中)

no weight landscape

谢谢

3个回答

3
在这种情况下的最佳实践是拥有2个布局文件,每个方向一个。
在Android Studio中,在/res目录下创建一个名为layout-land的新文件夹,并将横屏的布局xml文件与同名放入其中。
当设备方向改变时,Android操作系统会使用该文件夹中的xml文件而不是尝试调整原始文件。这是支持方向的推荐方法。

1
按照您的建议处理了横屏模式视图。谢谢。 - Adiel

0
@Adiel - 在Android Studio下,在/res目录下创建一个名为layout-land的新文件夹,并将横向布局的xml文件与相同命名放入其中。
完全同意这一点,因为Android Studio可以在请求时提供单独的选项。确保任何layout_width和layout_height都被定义为match_parent,因为似乎不起作用。

0
在您的xml中,您已经提到了android:layout_margin="50dp"用于您的Button,这影响了您的布局渲染,将元素向上推。 这导致文本视图被隐藏。尝试使用较小的边距或使用填充作为替代方案来修改布局。这可能有助于保留渲染中的所有元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接