安卓:ScrollView拉伸背景图像

5

我想让我的活动可滚动,但是当我把我的相对布局放在一个滚动视图中时,就会出现这种情况:

enter image description here

上面截图的代码如下:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/background"
        android:orientation="vertical"
        android:paddingLeft="60dp"
        android:paddingTop="53dp" >

        <ImageView
            android:id="@+id/gearImage"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_marginTop="70dp"
            android:clickable="true"
            android:contentDescription="@string/gearDescription_string"
            android:src="@drawable/gear" />
    </RelativeLayout>

</ScrollView>

如果我去掉ScrollView,它看起来是对的,但当然没有我想要的滚动功能:
现在,有没有办法让它看起来像这样:
这样我仍然可以滚动,但如果他们达到了我所拥有的背景图像的底部,那么就是白色的(很难确定,因为网页的背景是白色的,但我向第二个图像底部添加了一个白色矩形以显示我的意思)。 无论如何,没有理由让他们到达底部。
当然,如果您有任何其他关于如何实现ScrollView而不拉伸背景图像的建议,我会非常高兴听到它们。
谢谢。

你为什么要把背景放在滚动视图里面,而不是使用相对布局将其放在滚动视图后面呢?有什么特别的原因吗? - Stevy888
@Stevy888 对不起,你的意思是什么?你是建议我现在的方式(ScrollView -> RelativeLayout)改为RelativeLayout -> ScrollView -> RelativeLayout吗?谢谢! - capcom
是的,或者类似于RelativeLayout->ImageView和ScrollView->RelativeLayout。图像被拉伸是因为它试图匹配父级(scrollview)的高度,而父级比屏幕大。通过将图像放在ScrollView之外,父级不再是ScrollView,fill_parent将引用屏幕的高度。 - Stevy888
你想通过图像和滚动来实现什么样的行为?你希望图像不被拉伸,但也能随着内容一起滚动吗? - Stevy888
@Stevy888 这是一个有趣的解决方案,但问题在于用户会滚动并很容易看到有色空间,对吧?我想到了另一种方法,但它基于我不知道是否可能的东西。在相对布局中是否可以将物体放在彼此上面?例如,我能否在同一布局中将ImageView放在Button后面?谢谢。 - capcom
显示剩余5条评论
5个回答

6

请查看android:fillViewport。根据文档,这个属性定义了滚动视图是否应该拉伸其内容以填充视口。将以下代码添加到您的ScrollView中:

android:fillViewport="true"

希望这能帮到你。
编辑:
请尝试以下步骤:
1. 在 ScrollView 上设置 android:layout_height="fill_parent" 2. 在 RelativeLayout 上设置 android:layout_height="wrap_content"

尝试了你的编辑,也没有起作用。但是背景应该放在scrollview还是relativelayout中呢? - capcom
我会把它放在“ScrollView”上。 - overbet13
问题在于,当我在相对布局中有一个文本字段并选择它时,键盘会从底部弹出。这没问题,但是然后背景图像会缩小以适应屏幕顶部和键盘之间的空间,当我滚动文本字段时,它们会在背景前面滚动,看起来很奇怪。我需要的是相对布局中的所有内容一起滚动。希望你明白我的意思。 - capcom
将其作为单独的“ImageView”添加到您的布局中。 - overbet13

2

我曾经遇到同样的问题,以下方法对我有效:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rel"  
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:background="@drawable/login_background"
    android:fillViewport="true"
    >

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
   android:orientation="vertical"
  >

1

不要将背景设置为RelativeLayout,而是将其设置为您的ScrollView。因此,您只需将此属性从<RelativeLayout>标记移动到<ScrollView>标记中:

android:background="@drawable/background"

这将消除发生的拉伸,背景不会随着RelativeLayout滚动。但是这并不能产生在未缩放的背景下显示白色背景的效果。


谢谢,我也试了那个方法,但它也不起作用。我不明白出了什么问题,因为看起来应该是可以的。如果我将背景放在滚动视图中,那么滚动视图的高度应该保持为fill_parent吗? - capcom
问题是,如果我这样做,当我滚动时背景不会移动。因此,当我选择它们输入文本时,我的文本字段将在其前面滚动。我需要背景和相对布局中的所有内容一起移动,因此我认为将背景保留在相对布局中是必要的。 - capcom

1
原因是我的图像在像素方面太大了,所以它不能正常工作。我猜测scrollview被迫保持图像的原始大小,所以它只是这样做了。因为我的scrollview是垂直的,所以它使长度成为原始图像的完整长度,并且沿宽度压缩它,因为我没有一个横向滚动视图。
简单的解决方法是使图像变小。多么奇怪,它可以在普通布局中正确调整大小,但在scrollview中却不行。

如何编辑照片大小以完全适应scrollView背景?这取决于手机分辨率吗? 如何编辑照片大小以完全适应scrollView背景?这取决于手机分辨率吗? - Alston

0

这个对我解决了问题

在你的清单文件中的相应活动中添加这一行

android:windowSoftInputMode="adjustResize" 

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