RelativeLayout:layout_marginLeft不一致的行为

时间:2011-12-16 10:03:10

标签: android android-layout

上下文:我有一个小部件,它基本上由一个包含一堆TextView的RelativeLayout组成。这就是我希望窗口小部件在视觉上看起来像,然后是XML布局代码:

Expected layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/alarm_widget_layout"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   >
  <TextView
     android:id="@+id/alarm_time"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:text="8:30"
     android:textSize="40sp"
     />
  <TextView
     android:id="@+id/alarm_am_pm"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_toRightOf="@id/alarm_time"
     android:layout_marginLeft="2dp"
     android:layout_alignTop="@id/alarm_time"
     android:textSize="18sp"
     android:text="AM"
     />
  <TextView
     android:id="@+id/alarm_days"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_below="@id/alarm_time"
     android:textSize="16sp"
     android:text="M T W T F S S"
     />
  <TextView
     android:id="@+id/toggle_indicator"
     android:layout_height="8sp"
     android:layout_width="80sp"
     android:layout_below="@id/alarm_days"
     android:layout_centerHorizontal="true"
     android:background="@drawable/toggle_button_oval"
     />
</RelativeLayout>

问题:在以下情况下,我对layout_marginLeft的不一致行为感到困惑:

  1. 当这些小部件在LinearLayout内垂直堆叠时,右上角的AM / PM文本需要android:layout_marginLeft =“15dp”,如上图所示。
  2. 但是,当小部件堆叠在2x2 TableLayout中时,AM / PM文本需要android:layout_marginLeft =“2dp”才能看起来正确。
  3. 为什么我看到这种不一致的行为? layout_marginLeft使用什么作为它的“起源”?

1 个答案:

答案 0 :(得分:1)

由于您使用的是垂直LinearLayout(orientation = vertical),因此android:layout_marginLeft将屏幕的最左侧作为原点,因此需要大的倾角值〜15。但是,如果您一直使用orientation = horizo​​ntal,则原点将是am_pm之前元素的结尾,因此您需要较小的dip值~2。 类似于相对和表格布局的情况。因为在使用RelativeLayout时,你提到了android:layout_toRightOf =“@ id / alarm_time”,原点将是alarm_time的结束,因此需要更小的下降值。