更改方向会删除 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">
或者实现两个layouts
portland
和landscape
方向。
所以你的问题是滚动视图中的项目比横向屏幕高度高。即使您在 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。
当 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">
或者实现两个layouts
portland
和landscape
方向。
所以你的问题是滚动视图中的项目比横向屏幕高度高。即使您在 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
:
listView.addHeaderView(headerView, null, false);
这种方法的副作用是 header 现在是 ListView
的一部分,它会随着您滚动列表而滚动。此外,它会将您在适配器中的位置偏移 1。