更改方向会删除 UI 个元素

Changing orientation removes UI elements

当 phone 处于纵向模式时,它会在顶部和下方显示标题和图片,其中有按钮和 ListView 以及评论。但是,当我将 phone 设置为横向模式时,按钮和 ListView 消失了,只显示标题和图像。我基本上不能再滚动到图像下方了。

还有第三个元素——body 的 TextView——它也在 ScrollView 中:每个布局都会有 TextView内容或图像。当 TextView 有内容但没有图像时,也会发生同样的事情。当图像或文本 没有 占据整个屏幕时,不会发生这种情况。

人像模式:

横向模式:

附带代码:

<LinearLayout 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:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="net.vannevel.redditapp.activities.PostActivity">

    <TextView
        android:id="@+id/postDetailTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textColor="#000" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

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

            <ImageView
                android:id="@+id/postDetailImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/postDetailBody"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/postDetailViewOnlineButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onViewOnlineButtonClicked"
        android:text="View original source" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="COMMENTS" />

    <ListView
        android:id="@+id/postDetailCommentList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

变化:

   <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

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

或者实现两个layoutsportlandlandscape方向。

所以你的问题是滚动视图中的项目比横向屏幕高度高。即使您在 ScrollView 内滚动,一旦到达它的末尾,您也无能为力。放置在 ScrollView 之外的所有元素都将离开屏幕并放置在任何可滚动容器之外。

我可以看到 3 种可能的解决方案:

1 - 为滚动视图设置固定大小,这样它就不会占据整个屏幕,这样你就可以让其他视图进入。但是不实用:phone 在横向中意味着高度较短并且你必须适合图片和评论列表...

2 - 有不同的横向布局 - 图片在左边,带有评论的列表在右边

3 - 去掉 ScrollView 并将 ListView 以上的所有内容设置为 ListView header (addHeaderView) 例如:

第 1 步 - 提取您在 ListView 之上的所有内容并将其放入不同的布局文件 - 我们称之为 header.xml

第 2 步 - 扩充布局:

View headerView = inflater.inflate(R.layout.header, listView, false);

第 3 步 - 像现在一样初始化 header 上的项目

第 4 步 - 将视图设置为列表 ListView:

的 header
listView.addHeaderView(headerView, null, false);

这种方法的副作用是 header 现在是 ListView 的一部分,它会随着您滚动列表而滚动。此外,它会将您在适配器中的位置偏移 1。