将ScrollView添加到RelativeLayout会更改窗口小部件的位置

时间:2012-11-10 17:45:00

标签: android scrollview relativelayout

以下是我的布局的XML。它明确指出标题,时间和描述TextViews应该在警报的图像下。但是,如屏幕截图所示,TextView已移至ImageView。为什么会发生这种情况?我该如何解决这个问题?当我添加scrollview时,问题才开始发生。

XML

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img_alarm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/alarm"
        android:layout_centerInParent="true"
        android:contentDescription="@string/content_description_layout_alarm"/>

    <TextView
        android:id="@+id/lbl_alarm_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/img_alarm"
        android:layout_alignLeft="@+id/img_alarm"
        android:text="@string/empty"
        />   
        <TextView
        android:id="@+id/lbl_alarm_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/img_alarm"
        android:layout_alignRight="@+id/img_alarm"
        android:text="@string/empty"
        />  
      <TextView
        android:id="@+id/lbl_alarm_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/lbl_alarm_title"
        android:layout_alignLeft="@+id/lbl_alarm_title"
        android:layout_alignRight="@+id/lbl_alarm_time"
        android:maxLines="1"
        android:ellipsize="marquee"
        android:text="@string/empty"
        />   

    <Button
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/lbl_alarm_description"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="5dip"
        android:paddingLeft="20dip"
        android:paddingRight="20dip"
        android:text="@string/stop_layout_alarm"
        android:gravity="center" />

</RelativeLayout>
</ScrollView>

图片

enter image description here

1 个答案:

答案 0 :(得分:2)

可爱的应用程序:)

嗯...不确定为什么它这样做,看起来你有正确的代码,没有破坏日食。但是我也有一些奇怪的错误,因为我不理解而且没有时间调试相对布局。

我知道一种替代方法,你可以完成你正在寻找的东西 -

有一个包含linearlayout而不是相对布局的scrollview。做这些事情:

  1. 对于线性布局,您可以设置orientation = vertical,这样它仍然是自上而下的顺序。
  2. 对于需要两个文本视图的部分,其中一个与右侧对齐而另一个与右侧对齐,您需要另一个内部线性布局,其方向=水平。然后让一个元素对齐父对象,另一个对齐父对齐。为此linearlayout添加一个weightSum = 1属性,并使两个textviews都为layout_width = 0.5,以便每个都是屏幕宽度的一半
  3. 将weightSum = 1属性应用于最外层的linearlayout,并查看其中的每个元素,使其layout_weight总和加起来1. layout_weight将允许元素占据屏幕上大部分的不动产。就像你设置你的imageView有android:layout_weight = 0.8然后它将占用屏幕的80%...从数学上来说,(layout_weight / weightSum)=(。08/1)= 80%
  4. 尝试使用该机制,如果应该工作:)如果它令人困惑我可以给代码 示例

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:weightSum="1">
    
            <ImageView
                android:id="@+id/img_alarm"
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:src="@drawable/alarm"
                android:layout_weight="0.7"
                android:contentDescription="@string/content_description_layout_alarm"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.1">
    
                <TextView
                    android:id="@+id/lbl_alarm_title"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:textSize="20dip"
                    android:textStyle="bold"
                    android:text="@string/empty"
                    />   
                    <TextView
                    android:id="@+id/lbl_alarm_time"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:textSize="20dip"
                    android:textStyle="bold"
                    android:text="@string/empty"
                    />  
    
            </LinearLayout>
    
              <TextView
                android:id="@+id/lbl_alarm_description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="0.1"
                android:maxLines="1"
                android:ellipsize="marquee"
                android:text="@string/empty"
                />   
    
            <Button
                android:id="@+id/btn_stop"
                android:layout_weight="0.1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="5dip"
                android:paddingLeft="20dip"
                android:paddingRight="20dip"
                android:text="@string/stop_layout_alarm"
                android:gravity="center" />
    
        </LinearLayout>
    </ScrollView>
    

    我希望这至少值得付出努力:D