TextView很难对齐toTop和alignBottom

时间:2011-09-22 21:03:08

标签: android android-layout

Text failing to align

“太阳是红色的”应该对齐到图像的顶部,“2pm”应该对齐到底部。为什么属性layout_alignTop和layout_alignBottom没有按照文档记录工作?

  <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="9dp">
        <ui.RoundedImageView
        android:id="@+id/img_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="9dp"
        st:cornerRadius="3"
        android:background="@drawable/black_rounded3" />
        <TextView
                android:id="@+id/uname"
                android:layout_toRightOf="@id/img_user"
                android:layout_alignTop="@id/img_user"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:textStyle="bold" />
        <TextView
                android:id="@+id/time"
                android:layout_toRightOf="@id/img_user"
                android:layout_alignBottom="@id/img_user"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#909191" />

        <LinearLayout
                android:id="@+id/layout_g"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="9dp"
                android:layout_marginLeft="9dp"
                android:layout_alignParentRight="true"
                android:clickable="true"
                android:gravity="right">
                <TextView
                        android:gravity="right"
                        android:layout_gravity="right"
                        android:id="@+id/gtext"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        style="@style/text_detail" />
        </LinearLayout>
      </RelativeLayout>

2 个答案:

答案 0 :(得分:3)

  

为什么layout_alignTop和layout_alignBottom属性没有按照文档记录工作?

- &GT;他们这样做。

问题在于您正在使用的RoundedImageView对象。我猜测它是onMeasure是不正确的,并没有返回其自身顶部和底部的正确值。在了解了您正在使用的这个RoundedImageView的任何其他内容之后,我无法真正指出您的方向来修复它。

我将您的代码更改为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="9dp">
    <ImageView
    android:id="@+id/img_user"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="9dp"

    android:background="@drawable/black" />
    <TextView
            android:id="@+id/uname"
            android:layout_toRightOf="@id/img_user"
            android:layout_alignTop="@id/img_user"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000000"
            android:text="the sun is red"
            android:textStyle="bold" />
    <TextView
            android:id="@+id/time"
            android:layout_toRightOf="@id/img_user"
            android:text="2pm"
            android:layout_alignBottom="@id/img_user"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#909191" />

    <LinearLayout
            android:id="@+id/layout_g"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="9dp"
            android:layout_marginLeft="9dp"
            android:layout_alignParentRight="true"
            android:clickable="true"
            android:gravity="right">
            <TextView
                    android:gravity="right"
                    android:layout_gravity="right"
                    android:id="@+id/gtext"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
    </LinearLayout>
  </RelativeLayout>

它恰当地对齐了文本。这是截图:

enter image description here

答案 1 :(得分:0)

我在自定义视图(在我的情况下直接继承自android.view.View)和RelativeLayout时遇到了类似的问题。

我没有覆盖onMeasure()方法并使用我在onDraw()中获得的画布来将我的图形写入其中。图形输出完全正常,但RelativeLayout中其他视图的对齐方式与此处描述的情况不同。

最后我发现我的构造函数没有正确调用超类的构造函数(我忘了传递AttributeSet)。在我将构造函数的第一行更改为

之后
public MyNewView (Context context, AttributeSet attrs) {
    super(context, attrs);
    ...
}

突然间一切都运转良好。

似乎在调用android.View.view之前很久onMeasure()的构造函数中已经发生了Android布局算法的一些魔力。