“太阳是红色的”应该对齐到图像的顶部,“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>
答案 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>
它恰当地对齐了文本。这是截图:
答案 1 :(得分:0)
我在自定义视图(在我的情况下直接继承自android.view.View
)和RelativeLayout
时遇到了类似的问题。
我没有覆盖onMeasure()
方法并使用我在onDraw()
中获得的画布来将我的图形写入其中。图形输出完全正常,但RelativeLayout
中其他视图的对齐方式与此处描述的情况不同。
最后我发现我的构造函数没有正确调用超类的构造函数(我忘了传递AttributeSet
)。在我将构造函数的第一行更改为
public MyNewView (Context context, AttributeSet attrs) {
super(context, attrs);
...
}
突然间一切都运转良好。
似乎在调用android.View.view
之前很久onMeasure()
的构造函数中已经发生了Android布局算法的一些魔力。