Android 中的 ScrollView 落后于按钮
ScrollView going behind button in Android
为什么这里的滚动视图在按钮后面?我希望滚动视图根据设备拉伸高度,但无法使其正常工作,因为它总是位于按钮后面。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_view"
style="@style/DetailView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<TextView
style="@style/TextView"
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
style="@style/TextView"
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
style="@style/TextView"
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
<LinearLayout style="@style/DetailView.Buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
style="@style/Button"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="@string/viewfile"/>
</LinearLayout>
</RelativeLayout>
Why is the scrollview going behind the button here?
因为它在您的布局中排在第一位,所以 ReletiveLayout
和 FrameLayout
可用于提供 Z 顺序,因此在您的布局中出现较晚的每个子项都具有较高的 z 值,因此它可以up.Add android:layout_below = "@id/scrollview_message_text"
到你最后的线性布局或者在记住相关布局的这个特性的范围内排序你的视图。
发生这种情况是因为您使用相对布局作为根布局。所以两个布局都放在同一个地方但是按钮布局是在滚动视图之后声明的,所以它显示在滚动视图上方
如果您在 scrollview
之前定义按钮,则会发生相反的情况
所以你应该如下定义它来实现你想要的。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_view"
style="@style/DetailView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_above="@id/layout_bottom"
android:orientation="vertical" >
<TextView
style="@style/TextView"
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
style="@style/TextView"
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
style="@style/TextView"
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_bottom"
style="@style/DetailView.Buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
style="@style/Button"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="@string/viewfile"/>
</LinearLayout>
</RelativeLayout>
或者您可以尝试使用 LinearLayout 作为根视图并设置
layout_height = "0dp"
layout_weight = "1"
到包含滚动视图的布局
同时使用这两种方式将使按钮粘在布局底部,顶部布局将获得所有剩余高度。
祝你好运
这是我认为您正在寻找的工作副本
1: 将按钮移动到相关布局的顶部(添加了一个 id )
android:layout_alignParentBottom="true"
<LinearLayout android:id="@+id/buttons"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="Button"/>
</LinearLayout>
2: 在包含滚动的布局中添加更改宽度和高度以匹配父级
但是(关键)添加 android:layout_above="@id/buttons"
<LinearLayout
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:gravity="center"
android:orientation="vertical" >
所以把它们放在一起:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/detail_view"
>
<!-- Buttons at the top of layout but aligned to the bottom -->
<LinearLayout android:id="@+id/buttons"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="Button"/>
</LinearLayout>
<!-- Linear layout to fill screen, but assigned to layout above the buttons -->
<LinearLayout
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
</RelativeLayout>
我删除了样式,以便可以在布局中看到它,并确保它在发布之前有效。希望这有帮助。
相对布局允许您将元素层叠在一起。因此,如果这不是您要查找的内容,则需要使用 toLeft、toRight、above、below 指令将布局推到正确的位置。
为什么这里的滚动视图在按钮后面?我希望滚动视图根据设备拉伸高度,但无法使其正常工作,因为它总是位于按钮后面。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_view"
style="@style/DetailView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<TextView
style="@style/TextView"
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
style="@style/TextView"
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
style="@style/TextView"
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
<LinearLayout style="@style/DetailView.Buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
style="@style/Button"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="@string/viewfile"/>
</LinearLayout>
</RelativeLayout>
Why is the scrollview going behind the button here?
因为它在您的布局中排在第一位,所以 ReletiveLayout
和 FrameLayout
可用于提供 Z 顺序,因此在您的布局中出现较晚的每个子项都具有较高的 z 值,因此它可以up.Add android:layout_below = "@id/scrollview_message_text"
到你最后的线性布局或者在记住相关布局的这个特性的范围内排序你的视图。
发生这种情况是因为您使用相对布局作为根布局。所以两个布局都放在同一个地方但是按钮布局是在滚动视图之后声明的,所以它显示在滚动视图上方 如果您在 scrollview
之前定义按钮,则会发生相反的情况所以你应该如下定义它来实现你想要的。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_view"
style="@style/DetailView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_above="@id/layout_bottom"
android:orientation="vertical" >
<TextView
style="@style/TextView"
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
style="@style/TextView"
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
style="@style/TextView"
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_bottom"
style="@style/DetailView.Buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
style="@style/Button"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="@string/viewfile"/>
</LinearLayout>
</RelativeLayout>
或者您可以尝试使用 LinearLayout 作为根视图并设置
layout_height = "0dp"
layout_weight = "1"
到包含滚动视图的布局
同时使用这两种方式将使按钮粘在布局底部,顶部布局将获得所有剩余高度。
祝你好运
这是我认为您正在寻找的工作副本
1: 将按钮移动到相关布局的顶部(添加了一个 id ) android:layout_alignParentBottom="true"
<LinearLayout android:id="@+id/buttons"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="Button"/>
</LinearLayout>
2: 在包含滚动的布局中添加更改宽度和高度以匹配父级 但是(关键)添加 android:layout_above="@id/buttons"
<LinearLayout
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:gravity="center"
android:orientation="vertical" >
所以把它们放在一起:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/detail_view"
>
<!-- Buttons at the top of layout but aligned to the bottom -->
<LinearLayout android:id="@+id/buttons"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="5dip"
android:id="@+id/button_view_file"
android:text="Button"/>
</LinearLayout>
<!-- Linear layout to fill screen, but assigned to layout above the buttons -->
<LinearLayout
android:layout_above="@id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/textview_message_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<TextView
android:id="@+id/textview_message_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
</TextView>
<ScrollView
android:id="@+id/scrollview_message_text"
android:layout_height="wrap_content"
android:paddingBottom="20dip"
android:layout_width="fill_parent">
<TextView
android:id="@+id/textview_message_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</ScrollView>
</LinearLayout>
</RelativeLayout>
我删除了样式,以便可以在布局中看到它,并确保它在发布之前有效。希望这有帮助。
相对布局允许您将元素层叠在一起。因此,如果这不是您要查找的内容,则需要使用 toLeft、toRight、above、below 指令将布局推到正确的位置。