2012-03-06 55 views
6

我正在为大学课程开发即时消息应用程序,类似于Whatsapp,因为您可能会猜到在附加屏幕截图中看到图标:)。在RelativeLayout中正确对齐TextViews

我有一个ListFragment正在填充一个自定义的CursorAdapter。它提供了两种类型的视图,发送的消息(右对齐)和收到的消息(左对齐)。

发送消息的布局很好,但我不能说接收到的消息是一样的。

这里是一个屏幕截图:

enter image description here

发送消息布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:background="#FFCCCCCC" 
     android:padding="5dp" > 

     <TextView 
      android:id="@+id/ceo_timestamp" 
      android:layout_width="60sp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:background="#FFBBBBBB" 
      android:gravity="center" 
      android:textSize="10sp" /> 

     <TextView 
      android:id="@+id/ceo_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/ceo_timestamp" 
      android:background="#FFAAAAAA" 
      android:gravity="right" 
      android:textSize="16sp" /> 
    </RelativeLayout> 

</RelativeLayout> 

接收消息布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:background="#FF999999" 
     android:padding="5dp" > 

     <TextView 
      android:id="@+id/cei_timestamp" 
      android:layout_width="60sp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:background="#FF888888" 
      android:gravity="center" 
      android:textSize="10sp" /> 

     <TextView 
      android:id="@+id/cei_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toLeftOf="@+id/cei_timestamp" 
      android:background="#FF777777" 
      android:gravity="right" 
      android:textSize="16sp" /> 
    </RelativeLayout> 

</RelativeLayout> 

那些难看的背景颜色被添加刚看到每个视图和布局所占用的空间。正如你在截图中看到的那样,发送消息(右对齐)的效果很好。收到的消息(左对齐)对齐不好,因为RelativeLayout需要所有可用的水平空间,而不是仅包装内容。

任何人都知道如何解决它,或者更好的布局设计来完成我所需要的?

非常感谢。

+0

+1的屏幕截图,告诉所有的故事...:) – Farhan 2012-03-06 06:11:05

+0

那些愚蠢的事情和咖啡很好,继续工作时,并没有时间:) – mavnaranjo 2012-03-06 07:28:03

+0

+1为您的屏幕截图。 – PhatHV 2012-03-08 03:05:40

回答

1

在发送的消息布局中,使用android:layout_alignParentLeft =“true”替换android:layout_alignParentRight =“true”参数。

+0

感谢您的快速回答!我尝试过,并且对齐方式很好,但与预期相反。我想要发送正确的消息,并收到留言。 – mavnaranjo 2012-03-06 07:20:41

+0

所以你可以改变任何你想要的左右对齐。 :) – 2012-03-06 07:40:44

0

RelativeLayout的子女是alignParentRight时,它的宽度将自动更改为match_parentTextView cei_timestamp的android:layout_alignParentRight="true"使其父母的宽度从wrap_content更改为match_parent默默。
û有两种方法来纠正:

  1. 不使用RelativeLayout

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
    
        <LinearLayout 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignParentLeft="true" 
         android:background="#FF999999" 
         android:padding="5dp" > 
    
         <TextView 
          android:id="@+id/cei_text" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:background="#FF777777" 
          android:gravity="right" 
          android:textSize="16sp" /> 
    
         <TextView 
          android:id="@+id/cei_timestamp" 
          android:layout_width="60sp" 
          android:layout_height="wrap_content" 
          android:background="#FF888888" 
          android:gravity="center" 
          android:textSize="10sp" /> 
    
        </LinearLayout> 
    
    </RelativeLayout> 
    


  2. 不使用wrap_content,都使用特定的宽度一样60dp
0

我知道这是晚了,但我张贴它寻找解决相同问题的人。 要将接收到的消息与左侧对齐,只需从xml中的第二个TextView中为接收到的消息删除此行。

android:layout_toLeftOf="@+id/cei_timestamp" 

我试了一个简单的例子,它的工作。 下面是代码和屏幕截图

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.android.myapplication1.MainActivity"> 
<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#FF4081"> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="60sp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:gravity="center" 
     android:text="Hello" 
     android:textSize="23sp" /> 


    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@+id/textView" 
     android:gravity="right" 
     android:text="New Text" 
     android:textColor="#FFF" 
     android:textSize="23sp" /> 
</RelativeLayout> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout centerHorizontal="true" 
    android:layout marginTop = "104dp" 
    android:text="New Button" /></RelativeLayout>` 

button is irrelevant but please tolerate it anyways :)