Android泡泡聊天的相对布局

时间:2014-07-14 06:38:47

标签: android android-layout

我正在研究android中的聊天布局。 我的问题是泡沫没有根据消息文本调整大小。 我按照这个例子Bubble Chat layout 请提出解决方案。

http://i62.tinypic.com/4i0mcn.png(由于低代表无法上传图片)

整体布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/main">


<LinearLayout
    android:id="@+id/bottom_write_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@drawable/message_bar" >

    <EditText
        android:id="@+id/text"
        android:layout_width="10dip"
        android:layout_height="wrap_content"
        android:layout_margin="5sp"
        android:layout_weight="1.88"
        android:background="@drawable/message_field"
        android:ems="15"
        android:padding="5sp"
        android:textColor="@color/textFieldColor" >


        <requestFocus />
    </EditText>

    <Button
        android:layout_width="40dp"
        android:layout_height="27dp"
        android:layout_margin="5sp"
        android:layout_weight="0.07"
        android:background="@drawable/ic_action_send"
        android:onClick="sendMessage"
        android:textColor="#FFF" />

</LinearLayout>

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_above="@id/bottom_write_bar"
    android:layout_alignParentTop="true"
    android:cacheColorHint="#FFFFFF"
    android:divider="#FFFFFF"
    android:dividerHeight="2dp"
    android:listSelector="#FFFFFF" >
</ListView>

<TextView
    android:id="@android:id/empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/bottom_write_bar"
    android:layout_alignParentTop="true"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/main_empty_messages" />

</RelativeLayout>

消息布局代码为:

    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/background"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingRight="4dip"
    android:paddingBottom="4dip"
    android:background="@drawable/speech_bubble_green">



 <!--message  -->

        <TextView
            android:id="@+id/tvmessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="28dp"
            android:layout_marginLeft="5dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:text="@string/strstatus"
            android:textColor="#B5ACAF"
            android:textSize="15sp"
             />

    <TextView
        android:id="@+id/tvdate"
        android:layout_marginTop="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:text="@string/strtime"
        android:textColor="#FFFFFF"
        android:textSize="12sp"
         />

    <TextView
        android:id="@+id/tvname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/tvmessage"      
        android:fontFamily="georgia"
        android:paddingBottom="29dip"
        android:text="@string/strname"
        android:textColor="#000000"
        android:textSize="14sp"
        android:textStyle="bold"
        android:typeface="serif" />

</RelativeLayout>

Java代码:

Message message = (Message) this.getItem(position);

    ViewHolder holder; 
    if(convertView == null)
    {

        holder = new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.sms, parent, false);
        holder.message = (TextView) convertView.findViewById(R.id.tvmessage);
        holder.tdate = (TextView) convertView.findViewById(R.id.tvdate);
        holder.tsender = (TextView) convertView.findViewById(R.id.tvname);


        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();
    RelativeLayout bg = (RelativeLayout)convertView.findViewById(R.id.background);
    /* Current Time formatting */
    Time = "";
    suff = "AM";
    timeHR = new SimpleDateFormat("HH").format(Calendar.getInstance().getTime());
    time = Integer.parseInt(timeHR);
    if(time > 12){
       time = time - 12;
       suff = "PM";
   }
  String timeMIN = new SimpleDateFormat("mm").format(Calendar.getInstance().getTime());   
 // SimpleDateFormat("yyyyMMdd_HHmmss") for full Date!
  if(!message.isStatusMessage()){
    Time = String.valueOf(time)+ ":"+timeMIN+" "+suff;
  }

    if(message.isMine()) {
      pre = "Me";

        bg.setBackgroundResource(R.drawable.bubble_green);
        bg.setGravity(Gravity.RIGHT);
    }  else {
        bg.setBackgroundResource(R.drawable.bubble_yellow);
        bg.setGravity(Gravity.LEFT);
      pre = this.sender;
  } 

  holder.message.setTextColor(R.color.textColor);
    holder.message.setText(message.getMessage());
    holder.tdate.setText(Time);
    holder.tsender.setText(pre);

    if(message.isStatusMessage()){

        holder.tdate.setText("");
        holder.tsender.setText("");
    }


    //check if it is a status message then remove background, and change text color.
    if(message.isStatusMessage())
    {
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            holder.message.setBackgroundDrawable(null);
        } else {
            holder.message.setBackground(null);
        }

        holder.message.setTextColor(R.color.textFieldColor);
    }
            return convertView;

2 个答案:

答案 0 :(得分:0)

RelativeLayout有:

android:layout_width="fill_parent"

事实上,在你的形象中,父母的宽度确实如此。至少,您需要将其更改为:

android:layout_width="wrap_content"

完全定义相对布局也是一种好习惯:

<TextView
    android:id="@+id/tvname"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:fontFamily="georgia"
    android:paddingBottom="29dip"
    android:text="@string/strname"
    android:textColor="#000000"
    android:textSize="14sp"
    android:textStyle="bold"
    android:typeface="serif" />


<TextView
    android:id="@+id/tvdate"
    android:layout_marginTop="10dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:text="@string/strtime"
    android:textColor="#FFFFFF"
    android:textSize="9sp"
    />

<TextView
    android:id="@+id/tvmessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="28dp"
    android:layout_marginLeft="5dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/tvname"
    android:text="@string/strstatus"
    android:textColor="#B5ACAF"
    android:textSize="15dip"
    />

答案 1 :(得分:0)

我知道有点迟了但可能会帮助其他人解决问题。

<p style="text-align: center;"><i class="fa fa-desktop" aria-hidden="true"></i></p>

未在viewHolder中设置,因此不会调整大小。

在viewHolder中声明bg布局并调用它:

bg.setBackgroundResource(R.drawable.bubble_green);