layout_gravity = right的相对布局缩小,包含Android中的TextView

时间:2014-04-18 07:53:43

标签: android android-layout

出于某种原因,相对布局的重力设置为"右"它的重力不会停留在最长的小部件上,而是直到最短的小部件,向右移动最长的部分。

这是一张更好地解释它的图片:http://i.stack.imgur.com/POHmA.png

我希望它在到达@id / timestampTextView时停止向右拉引力,即我想要"一些很长很长的文本"完全显示,不隐藏。此外,我希望它尊重android:layout_alignRight =" @ + id / textTextView",即"一些很长很长的文本"应该与"短文本"右边对齐。

以下是该图片的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/abc_cab_background_top_holo_dark" >

    <RelativeLayout
        android:id="@+id/messageRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="right"
        android:background="@drawable/abc_cab_background_top_holo_light">

       <TextView
            android:id="@+id/textTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="short text"
            android:textSize="20sp"
            android:layout_below="@+id/timestampTextView" />

       <TextView
           android:id="@+id/timestampTextView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:singleLine="true"
           android:text="some long long long long text"
           android:layout_alignRight="@+id/textTextView"
           android:textSize="10sp" />

       </RelativeLayout>

</LinearLayout>

有趣的是,将layout_gravity设置为左侧和android:layout_alignLeft =&#34; @ + id / textTextView&#34;而不是alignRight,它适用于左侧,但我需要它在右侧同样工作。为什么同样的事情不适用于右侧?

以下是正确显示左侧的图片和代码:http://i.stack.imgur.com/6i4yG.png

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/abc_cab_background_top_holo_dark" >

    <RelativeLayout
        android:id="@+id/messageRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="left"
        android:background="@drawable/abc_cab_background_top_holo_light">

       <TextView
            android:id="@+id/textTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="short text"
            android:textSize="20sp"
            android:layout_below="@+id/timestampTextView" />

       <TextView
           android:id="@+id/timestampTextView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:singleLine="true"
           android:text="some long long long long text"
           android:layout_alignLeft="@+id/textTextView"
           android:textSize="10sp" />

       </RelativeLayout>

</LinearLayout>

更新

通过用LinearLayout替换RelativeLayout来解决这个问题:i.stack.imgur.com/dD5TL.png

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:background="@drawable/abc_cab_background_top_holo_dark" >

    <LinearLayout
       android:id="@+id/messageLinearLayout"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="right"
       android:orientation="vertical"
       android:background="@drawable/abc_cab_background_top_holo_light">

       <TextView
          android:id="@+id/timestampTextView"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:singleLine="true"
          android:text="some long long long long text"
          android:textSize="12sp"
          android:layout_gravity="right" />

       <TextView
           android:id="@+id/textTextView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="short text"
           android:textSize="20sp"
           android:layout_gravity="right" />

       </LinearLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

您可以使用带有id textTextView的TextView的android:layout_alignRight属性,而不是带有id timestampTextView的TextView。见下文。我认为这不是最好的方式,但它有效。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/abc_cab_background_top_holo_dark" >

    <RelativeLayout
        android:id="@+id/messageRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="right"
        android:background="@drawable/abc_cab_background_top_holo_light">

       <TextView
            android:id="@+id/textTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="short text"
            android:layout_alignRight="@id/timestampTextView"
            android:textSize="20sp"
            android:layout_below="@+id/timestampTextView" />

       <TextView
           android:id="@+id/timestampTextView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:singleLine="true"
           android:text="some long long long long text"
           android:textSize="10sp" />

       </RelativeLayout>

</LinearLayout>

答案 1 :(得分:0)

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:gravity="right|top"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/messageRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignStart="@+id/timestampTextView"
            android:layout_below="@+id/timestampTextView"
            android:layout_centerVertical="true"
            android:text="short text"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/timestampTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:singleLine="true"
            android:text="some long long long long text"
            android:textSize="10sp" />
    </RelativeLayout>

</LinearLayout>