2011-12-16 15 views
1

コンテキスト:私は基本的にTextViewsの束をラップするRelativeLayoutで構成されるウィジェットを持っています。ここで私はXMLレイアウトコードに続いて、視覚的にウィジェットをしたいように見えるものです:RelativeLayout:layout_marginLeft不整合な動作

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の一貫性のない動作と困惑:これらのウィジェットはのLinearLayout、右上にあるAM/PMのテキスト内で垂直に積層されている

  1. Android要件:それは上の写真ではないように見えるためにlayout_marginLeft =「15dpを」。
  2. しかし、ウィジェットが2x2 TableLayoutに積み重ねられている場合、AM/PMテキストにはアンドロイド:layout_marginLeft = "2dp"が正しく表示されている必要があります。

なぜ私はこの矛盾した動作を見ていますか? layout_marginLeftは「起源」として何を使用していますか?

答えて

1

LinearLayout(orientation = vertical)を使用しているため、android:layout_marginLeftはスクリーンの左端を原点とし、〜dip値が15より大きい必要があります。しかし、orientation = horizo​​ntalを使用していた場合、原点はam_pmの直前の要素の終わりになりますので、より小さいディップ値〜2が必要になります。 Relative nd Tabular Layoutの場合も同様です。 RelativeLayoutを使用している間、あなたはandroid:layout_toRightOf = "@ id/alarm_time"を記述しているので、オリジンはalarm_timeの終わりになり、より小さなディップ値が必要になります。

+0

返信いただきありがとうございます@SaurabhVerma。私はこれを正しく理解しているかどうか分からない。 RelativeLayoutの積み重ねに基づいてlayout_marginLeftの変更によって使用された原点をお伝えしていますか? RelativeLayoutが垂直のLinearLayoutに積み重ねられている場合、原点は画面の最も左にあります。ただし、2x2のTableLayoutに積み重ねられている場合、originは@ id/alarm_time(layout_toRightOf属性のため)です。これは非常に混乱しています!この動作はどこに文書化されていますか? –

関連する問題