如何在群聊中显示消息和时间?

时间:2015-08-28 06:34:31

标签: java android

我正在开发一个Android应用程序,我有群聊功能,当我在群聊时发送消息我需要显示消息和时间(在消息结束时需要显示的时间)聊天消息)。

Here is my layout code

<?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:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:paddingLeft="10dp">

     <TextView
        android:id="@+id/txtInfo"
        android:layout_width="wrap_content"
        android:layout_height="30sp"
        android:layout_gravity="left"
        android:textSize="12sp"
        android:textColor="@color/lightred"
        android:textStyle="italic"
        />

    <TextView
        android:id="@+id/txtMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:layout_marginRight="80dp"
        android:background="@color/grey"
        android:textColor="@color/white"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:textStyle="italic|bold"
        />

</LinearLayout>

&#34; @ + ID / txtInfo&#34;用于获取当前日期和时间&amp; &#34; @ + ID / txtMsg&#34;用于显示消息。

现在我的输出看起来像这样 enter image description here

但我期待我的输出为, enter image description here

我的编程代码如下,

 public class MessagesListAdapter extends BaseAdapter {

        private Context context;
        private List<ChatMessageObjects> messagesItems;

        public MessagesListAdapter(Context context, List<ChatMessageObjects> navDrawerItems) {
            this.context = context;
            this.messagesItems = navDrawerItems;
        }

        @Override
        public int getCount() {
            return messagesItems.size();
        }

        @Override
        public Object getItem(int position) {
            return messagesItems.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }


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

            /**
             * The following list not implemented reusable list items as list items
             * are showing incorrect data Add the solution if you have one
             * */

            ChatMessageObjects m = messagesItems.get(position);

            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            if (messagesItems.get(position).getMessage_type() == Constants.IS_TYPE_CHAT_IMAGE) {
                convertView = mInflater.inflate(R.layout.chat_image,
                        null);

                ImageView imageView = (ImageView) convertView.findViewById(R.id.imgView);
                TextView imageLabel = (TextView) convertView.findViewById(R.id.lblImage);
                if (messagesItems.get(position).isSelf() == 0) {
                    Log.i(Constants.TAG, " the value is from others");
                    try {
                        URL url = new URL(messagesItems.get(position).getMessage());
                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        connection.setDoInput(true);
                        connection.connect();
                        InputStream input = connection.getInputStream();
                        imageView.setImageBitmap(BitmapFactory.decodeStream(input));
                    } catch (IOException e) {
                        Log.i(Constants.TAG, e.toString());
                    }
                } else if (messagesItems.get(position).isSelf() == 1) {
                    Log.i(Constants.TAG, " the value is itself");
                    imageView.setImageURI(Uri.fromFile(imgFile));
                    imageLabel.setText(messagesItems.get(position).getFromName());
                }
            } else if (messagesItems.get(position).getMessage_type() == Constants.MESSAGE_TYPE_MSG) {
                if (messagesItems.get(position).isSelf() == 1) {
                    // message belongs to you, so load the right aligned layout
                    convertView = mInflater.inflate(R.layout.chat_message_right,
                            null);
                    TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg);
                    //date and time added here
                    TextView date = (TextView) convertView.findViewById(R.id.txtInfo);
                    txtMsg.setText(m.getMessage());
                    lblFrom.setText(m.getFromName());
                    date.setText(m.getDate());
                } else if (messagesItems.get(position).isSelf() == 0) {
                    // message belongs to other person, load the left aligned layout
                    convertView = mInflater.inflate(R.layout.chat_message_left,
                            null);
                    TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg);
                    //date and time added here
                    TextView date = (TextView) convertView.findViewById(R.id.txtInfo);
                    txtMsg.setText(m.getMessage());
                    lblFrom.setText(m.getFromName());
                    date.setText(m.getDate());
                }

            }

            return convertView;
        }

date.setText(m.getDate());代码以这种格式获取我的日期&#34; 28-aug-2015 11:46:11 pm&#34;。我需要以这种格式转换我的日期&#34; 11:46 pm&#34;如何更改此格式以及如何显示聊天消息以及时间如上所示请帮助我。

2 个答案:

答案 0 :(得分:1)

只需更改&#34; 垂直&#34;的 LinearLayout方向到&#34; 水平&#34;。

您可以使用时间来表示小时和分钟,如下所示:

    Time today = new Time(Time.getCurrentTimezone());
    today.setToNow();
    String timeInput = today.hour + ":" + today.minute;

更好的方法是使用SimpleDateFormat:

    SimpleDateFormat s = new SimpleDateFormat("HH:mm a");
    String msgTime = s.format(new Date());

修改

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
String msgTime = today.format("HH:mm a")

使用此示例显示格式化的时间。

答案 1 :(得分:1)

可以这样完成日期的格式化:
声明具有所需格式的SimpleDateFormat对象 -

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");。您可以按照here说明设置格式字符串 然后,您可以获得string来保留时间 - String myTime = sdf.format(new Date());并将该字符串添加到您的邮件中。

编辑 -
对于上午12:30 /时的时间格式,您应该使用SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");