-1

在我的应用程序中,我去显示这样的消息

请告诉我,如何在列表视图中显示消息,以及如何显示列表视图,一个在左边,另一个在右边

以及如何在消息底部显示时间

请看我的代码

    //view display 
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    AllmessagedispalyContants message = (AllmessagedispalyContants) this.getItem(position);
    ViewHolder holder;
    if(convertView == null)
    {
        holder = new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.allmessagesms, null);



        holder.message = (TextView) convertView.findViewById(R.id.message_text);
        holder.date=(TextView)convertView.findViewById(R.id.date);

        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();

    holder.message.setText(message.getMessage());
    holder.date.setText(message.getDate());


    LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();
    lp = (LayoutParams)holder.date.getLayoutParams();

    //check if it is a status message then remove background, and change text color.
    if(message.isStatusMessage())
    {
        holder.message.setBackgroundDrawable(null);
        lp.gravity = Gravity.LEFT;
        holder.message.setTextColor(R.color.textFieldColor);
    }
    else
    {   
        //Check whether message is mine to show green background and align to right

        if(message.messageType.equals(bool))
        {

            holder.message.setBackgroundResource(R.drawable.right);
            lp.gravity = Gravity.RIGHT;

        }
        //If not mine then it is from sender to show orange background and align to left
        else
        {

            holder.message.setBackgroundResource(R.drawable.lift);
            lp.gravity = Gravity.LEFT;

        }
        holder.message.setLayoutParams(lp);
        holder.message.setTextSize(14);
        Typeface typface=Typeface.createFromAsset(mContext.getAssets(),"fonts/Roboto-Bold.ttf");
        holder.message.setTypeface(typface);

        //holder.message.setTextColor(R.color.textColor);   
    }
    return convertView;
}
private static class ViewHolder
{
    TextView message;
    TextView date;



}

在此处输入图像描述

4

2 回答 2

3

您必须编写一个自定义适配器,并在 get view 方法中根据位置值返回相应的布局,图像位置在左侧或右侧。例如,每个奇数都将图像放在左侧,将消息放在右侧。

if((position%2)==0
 // even display the image on the right
else
   // odd display the image on the left.

为了给您一个想法,请使用左侧的图像创建如下布局:

   <?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="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_alignParentRight="true"
        android:text="TextView" />

</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="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_toRightOf="@+id/textView1"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

在前面提到的 get view 方法中,您可以执行以下操作:

   public View getView(int position, View convertView, ViewGroup parent) {

        View view;
        LayoutInflater vi = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if((position%2)==0{
        // even display the image on the right.
        view = vi.inflate(R.layout.image_right_layout, null);
        }else{
        // odd display the image on the left.
        view = vi.inflate(R.layout.image_left_layout, null);
        }

        return view;

}

您必须更改代码才能将内容设置到视图中。

于 2013-07-10T03:54:45.903 回答
0

为您的列表视图使用自定义适配器,并为列表视图行创建一个包含 2 个文本视图和 2 个图像的布局(一个用于发送者,一个用于接收者)。
现在使用数据库,您可以保存消息和状态,无论它是来自发送方还是接收方。据此,您可以决定要显示哪个 ImageView 和哪个 EditText 要隐藏哪个

基本上你需要这个:

1) 2 ImageView (一个用于接收者另一个用于发送者)
2) 2 EditText 或 TextView 一个用于接收者另一个用于发送者)
3) 用于保存您的消息条目并通过列表视图将其显示在您的 UI 上的数据库

这是布局:

<?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"
     >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
         >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Your Speech"
            android:textColor="@android:color/black"
            android:background="@android:color/holo_green_light" 
            >

        </TextView>

        <TextView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
            android:text="sender's Speech"
            android:gravity="right"
            android:textColor="@android:color/black"
            android:background="@android:color/holo_blue_light" 
            >

        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="5"
        android:orientation="horizontal"
        android:weightSum="10" >

        <ImageView
            android:background="@drawable/ic_launcher" 
            android:layout_height="50dip"
            android:layout_width="0dip"
            android:layout_weight="2"
            />
        <TextView
            android:layout_height="0dip"
            android:layout_width="0dip"
            android:layout_weight="6"
            />
        <ImageView
            android:background="@drawable/ic_launcher" 
            android:layout_height="50dip"
            android:layout_width="0dip"
            android:layout_weight="2"

            />
    </LinearLayout>

</LinearLayout>

当您将接收者语音文本视图的可见性设置为“不可见”并将图像视图设置为“不可见”时,您将获得以下布局:

在此处输入图像描述

当您将语音文本视图的可见性设置为“消失”并将图像视图设置为“不可见”时,您将获得以下布局:

在此处输入图像描述

将此布局设置为您的列表视图行。希望这会有所帮助。

于 2013-07-10T04:09:20.823 回答