2012-03-06 3 views
6

대학 과정을위한 인스턴트 메시지 응용 프로그램을 개발 중입니다. 첨부 된 스크린 샷의 아이콘을 볼 수 있듯이 Whatsapp와 비슷합니다.RelativeLayout에서 TextView를 올바르게 맞추기

사용자 정의 CursorAdapter로 채워지는 ListFragment가 있습니다. 두 가지 유형의보기, 보낸 메시지 (오른쪽 정렬) 및 수신 메시지 (왼쪽 정렬)를 제공합니다.

보낸 메시지의 레이아웃은 훌륭하게 작동하지만 수신 된 메시지에 대해 동일한 내용을 말할 수는 없습니다.

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

일 촬영 ...:) – Farhan

+0

그 멍청한 것들과 커피는 시간이 부족하고 할 일이있을 때 계속 사용하는 것이 좋습니다 :) – mavnaranjo

+0

+1 화면 캡처. – PhatHV

답변

1

보낸 메시지 레이아웃에서 android : layout_alignParentRight = "true"인 android : layout_alignParentRight = "true"매개 변수를 바꿉니다.

+0

빠른 답변 주셔서 감사합니다! 나는 그것을 시험해 보았고, 정렬은 좋았지 만, 예상했던 것과는 반대였다. 내가 보낸 메시지를 오른쪽으로 보내고 싶습니다. 그리고 왼쪽으로 메시지를 받았습니다. – mavnaranjo

+0

그래서 원하는대로 왼쪽과 오른쪽의 양쪽 정렬을 변경할 수 있습니다. :) –

0

RelativeLayout의 자식이 alignParentRight 인 경우, 너비는 match_parent으로 자동 변경됩니다. TextView cei_timestamp의 android:layout_alignParentRight="true" 부모의 너비가 wrap_content에서 match_parent으로 자동 변경됩니다. 모두 60dp 같은 특정 폭을 사용

  1. wrap_content를 사용하지 않는 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. 를 사용하지 마십시오
    는 U는 해결하는 방법은 두 가지가 있습니다.
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 :)

관련 문제