发送消息后ListView左右布局显示

基本功能

1. 自定义标题栏。(标题栏不做任何功能)

2. 有左右发送按钮。(这个只能自己和自己聊天哦,所以有左右发送按钮)

  (1)点击左边按钮发送按钮,在ListView的左侧显示。   (2)点击右边按钮发送按钮,在ListView的右侧显示。    3.有表情发送按钮。

  (1)当点击表情发送按钮时, 弹出表情框,点击想要发送的表情将其添加输入框中。   (2)当在此点击表情按钮时,,表情框收回。   (3)当表情框处在显示状态时, 点击输入框时,表情框收回。

聊天界面的制作(一)——基本布局的实现 聊天界面的制作(三)——表情列表发送功能 源码下载链接

左右发送显示功能

1. 定义一个点击左边发送按钮时,显示在左边的消息布局。 2. 定义一个点击右边发送按钮时,显示在左边的消息布局。 3. 数据M:定义消息的类ChatMessage。

{textViewTime;String textviewName;type;//信息类型,是在左边显示还是右边显示。/*定义两个构造器,一个无参,一个传值。*/public ChatMessage() {}public ChatMessage(int imageViewPerson, long textViewTime, String textViewHonour, String textviewName, String textViewInput) {this.imageViewPerson = imageViewPerson;this.textViewTime = textViewTime;this.textViewHonour = textViewHonour;this.textviewName = textviewName;this.textViewInput = textViewInput;}() {return type;}(int type) {this.type = type;}() {return imageViewPerson;}(int imageViewPerson) {this.imageViewPerson = imageViewPerson;}() {return textViewTime;}(long textViewTime) {this.textViewTime = textViewTime;}public String getTextViewHonour() {return textViewHonour;}(String textViewHonour) {this.textViewHonour = textViewHonour;}public String getTextviewName() {return textviewName;}(String textviewName) {this.textviewName = textviewName;}public String getTextViewInput() {return textViewInput;}(String textViewInput) {this.textViewInput = textViewInput;}}

4. 视图V: 定义一个MessageAdapter. 首先定义左右显示的两个布局,左边信息布局:

==”vertical”><TextView==”5dp”/><LinearLayout=”horizontal”><ImageView==”10dp”android:layout_marginLeft=”10dp”/><LinearLayout=”vertical”><LinearLayout=”1″><TextView===”@drawable/textview_honour_background”/><TextView==”名称” /></LinearLayout><TextView===></LinearLayout>

右边信息布局:

==”vertical”><TextView==”center” /><LinearLayout=”right”android:orientation=”horizontal”><LinearLayout==”vertical”><LinearLayout=”1″><TextView==”名称” /><TextView===”15sp” /></LinearLayout><TextView===><ImageView==></LinearLayout>

定义Adapter适配器,将数据适配到布局中:

{SEND_LEFT = 0;SEND_RIGHT = 1;private LayoutInflater mInflater;private List<ChatMessage> mData;private Html.ImageGetter mImageGetter;private SimpleDateFormat format;() {return 2;}(int position) {if (0 == mData.get(position).getType()) {return SEND_LEFT;//消息类型在左边} else if (1 == mData.get(position).getType()) {return SEND_RIGHT;//消息类型在右边} else {return 0;}}public MessageAdapter(LayoutInflater mInflater, List<ChatMessage> mData, Html.ImageGetter mImageGetter) {this.mInflater = mInflater;this.mData = mData;this.mImageGetter = mImageGetter;}() {return mData.size();}@Overridepublic Object getItem(int position) {return position;}(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup viewGroup) {ViewHolder viewHolder = null;if (convertView == null) {viewHolder = new ViewHolder();/*通过判断消息类型的不同,加载不同的布局。这里使用到了getItemViewType()方法。*/switch (getItemViewType(position)) {case SEND_LEFT:convertView = mInflater.inflate(R.layout.listview_lyaout_left, null);break;case SEND_RIGHT:convertView = mInflater.inflate(R.layout.listview_layout_right, null);break;default:break;}viewHolder.imageViewPerson = (ImageView) convertView.findViewById(R.id.imageview_person);viewHolder.textViewTime = (TextView) convertView.findViewById(R.id.textview_time);viewHolder.textViewHonour = (TextView) convertView.findViewById(R.id.textview_honor);viewHolder.textViewName = (TextView) convertView.findViewById(R.id.textview_name);viewHolder.textViewInput = (TextView) convertView.findViewById(R.id.textview_input);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}ChatMessage data = mData.get(position);//如果不是第一个Item且发送消息的两次时间在1min之内,则不再显示时间;否则显示时间if (position != 0) {ChatMessage dataBefore = mData.get(position – 1);long dateDifference = data.getTextViewTime() – dataBefore.getTextViewTime();if (dateDifference < 60000) {viewHolder.textViewTime.setVisibility(View.GONE);} else {format = new SimpleDateFormat(“EEE HH:mm:ss”);String time = format.format(new Date(data.getTextViewTime()));viewHolder.textViewTime.setText(time);}} else {format = new SimpleDateFormat(“EEE HH:mm:ss”);String time = format.format(new Date(data.getTextViewTime()));viewHolder.textViewTime.setText(time);}viewHolder.imageViewPerson.setImageResource(data.getImageViewPerson());viewHolder.textViewHonour.setText(data.getTextViewHonour());viewHolder.textViewName.setText(data.getTextviewName());//将受到的数据以富文本的形式显示。Spanned spanned = Html.fromHtml(data.getTextViewInput(), mImageGetter, null);viewHolder.textViewInput.setText(spanned);return convertView;}class ViewHolder {ImageView imageViewPerson;TextView textViewHonour;TextView textViewName;TextView textViewTime;TextView textViewInput;}}那绿叶上的水珠,是思念的泪滴。

发送消息后ListView左右布局显示

相关文章:

你感兴趣的文章:

标签云: