1

以下は、私のレイアウトの XML です。タイトル、時間、および説明の TextViews がアラームの画像の下にある必要があることを明示的に示しています。ただし、スクリーン ショットが示すように、TextViewは に移動しましたImageView。これはなぜ起こり、どうすれば修正できますか? スクロールビューを追加したときにのみ問題が発生し始めました。

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>

画像

ここに画像の説明を入力

4

1 に答える 1

2

かわいいアプリ:)

うーん...なぜそれが行われているのかわからない、Eclipseを無効にすることなく、正しいコードを持っているように見えます。しかし、relativelayoutにいくつかの奇妙なバグがあり、理解できず、デバッグする時間がありませんでした。

私はあなたが探していることを達成することができる別の方法を知っています-

相対レイアウトの代わりに線形レイアウトを含むスクロールビューがあります。これらのことを行います:

  1. linearlayoutの場合、orientation = verticalを設定して、トップダウンオーダーのままにすることができます。
  2. 1つが右に配置され、もう1つが右に配置されている、2つのテキストビューが必要な部分には、orientation=horizo​​ntalの別の内側のlinearlayoutが必要です。次に、一方の要素で親を左に揃え、もう一方の要素で親を右に揃えます。このlinearlayoutにweightSum=1属性を追加し、2つのテキストビューのそれぞれを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%

代わりにそのメカニズムを使用してみてください。うまくいくはずです:)混乱している場合は、コード例を挙げてください。

<?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

于 2012-11-10T18:00:35.780 に答える