搭建聊天的界面、输入图片和文本
来源:互联网 发布:中国警察智识数据库 编辑:程序博客网 时间:2024/04/27 23:42
- 聊天界面布局
- activity_mainxml
- 对话布局 item_messagexml
- ChatMessage
- MessageAdapter
- MainActivity
- 聊天界面布局
聊天界面布局
activity_main.xml
<LinearLayout 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" tools:context=".MainActivity" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" android:background="#79DFF6" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="模拟聊天" android:textColor="@color/white" android:textSize="25sp" android:padding="10dp"/> </LinearLayout> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/chat_background" android:divider="@null"> </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#EBECEE"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <Button android:id="@+id/button_send_left" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="发送" android:layout_margin="5dp" android:background="@drawable/btn_background"/> <EditText android:id="@+id/editview_content" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/btn_background" android:layout_margin="1dp" android:padding="10dp"/> <Button android:id="@+id/button_send_right" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="发送" android:background="@drawable/btn_background" android:layout_margin="5dp"/> </LinearLayout></LinearLayout>
对话布局 item_message.xml
<?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"><TextView android:id="@+id/textview_date" android:padding="10dp" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="星期五 10:36" android:textColor="#000000"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/imageview_head" android:layout_width="70dp" android:layout_height="70dp" android:src="@mipmap/ic_launcher"/> <LinearLayout android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" > <TextView android:id="@+id/textview_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="营长" android:textColor="@color/white" android:background="@drawable/text_background" android:textSize="15sp"/> <TextView android:id="@+id/textview_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:text="昵称:"/> </LinearLayout> <TextView android:id="@+id/textview_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="70dp" android:background="@mipmap/lv2" android:textColor="#000000" android:text="我是一条内容我是一条内容我是一条内容我是一条内容我是一条内容我是一条内容我是一条内容"> </TextView> </LinearLayout> </LinearLayout></LinearLayout>
ChatMessage
public class ChatMessage { private int imageHead; private String Title; private String nickName; private long time; private String message; public ChatMessage (){ } public ChatMessage(int imageHead, String title, String nickName, long time, String message) { this.imageHead = imageHead; Title = title; this.nickName = nickName; this.time = time; this.message = message; } public int getImageHead() { return imageHead; } public void setImageHead(int imageHead) { this.imageHead = imageHead; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
MessageAdapter
public class MessageAdapter extends BaseAdapter{ private LayoutInflater mInflater;//布局填充 private List<ChatMessage> mData; private Html.ImageGetter mImageGetter;//用来输入图片的 private SimpleDateFormat mFormat;//得到时间数 public MessageAdapter(LayoutInflater mInflater, List<ChatMessage> mData, Html.ImageGetter mImageGetter) { this.mInflater = mInflater; this.mData = mData; this.mImageGetter = mImageGetter; mFormat=new SimpleDateFormat("EEE HH:mm"); } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder=null; if(convertView==null){ convertView=mInflater.inflate(R.layout.item_message,null); viewHolder=new ViewHolder(); viewHolder.imageview_head= (ImageView) convertView.findViewById(R.id.imageview_head); viewHolder.textview_title= (TextView) convertView.findViewById(R.id.textview_title); viewHolder.textview_nickname= (TextView) convertView.findViewById(R.id.textview_nickname); viewHolder.textview_time= (TextView) convertView.findViewById(R.id.textview_date); viewHolder.textview_message= (TextView) convertView.findViewById(R.id.textview_message); convertView.setTag(viewHolder);//将viewHolder存储在convertView中 }else{ viewHolder= (ViewHolder) convertView.getTag();//重新获取viewHolder } ChatMessage msg=mData.get(position); viewHolder.imageview_head.setImageResource(msg.getImageHead()); viewHolder.textview_title.setText(msg.getTitle()); viewHolder.textview_nickname.setText(msg.getNickName()); Spanned spanned=Html.fromHtml(msg.getMessage(),mImageGetter,null);// viewHolder.textview_message.setText(Html.fromHtml(msg.getMessage(), null, null)); viewHolder.textview_message.setText(spanned); String time=mFormat.format(new Date(msg.getTime())); viewHolder.textview_time.setText(time);// viewHolder.textview_time.setText("时间"+msg.getTime()); return convertView; } class ViewHolder{ ImageView imageview_head; TextView textview_title; TextView textview_nickname; TextView textview_time; TextView textview_message; }}
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText mEditTextContent; private ImageView mImageView; private Html.ImageGetter ImageGetter;//用来输入图片的 private ListView mListView; private Button mButtonSendLeft; private MessageAdapter mAdapter; private List<ChatMessage> Data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditTextContent = (EditText) findViewById(R.id.editview_content); mImageView = (ImageView) findViewById(R.id.imageview); mButtonSendLeft = (Button) findViewById(R.id.button_send_left); mListView = (ListView) findViewById(R.id.listview); mImageView.setOnClickListener(this); mButtonSendLeft.setOnClickListener(this); ImageGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { Drawable drawable = getResources().getDrawable(R.mipmap.han); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } }; Data = new ArrayList<>(); mAdapter = new MessageAdapter(getLayoutInflater(), Data, ImageGetter); mListView.setAdapter(mAdapter); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.imageview: //Spanned是显示图片的 Spanned spanned = Html.fromHtml("<img src=''/>", ImageGetter, null); // ***********************************************************************************// Spanned spanned1= Html.fromHtml("文本中间的<img src = 'a_calendar'>图片 ", new Html.ImageGetter() {// @Override// public Drawable getDrawable(String source) {// int id = R.mipmap.ic_launcher;// Class clazz = R.mipmap.class;// try {// Field field=clazz.getDeclaredField(source);// id=field.getInt(clazz);// } catch (NoSuchFieldException e) {// e.printStackTrace();// } catch (IllegalAccessException e) {// e.printStackTrace();// }// Drawable drawable = getResources().getDrawable(id);// drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());// return drawable;// }// },null);// textView.setText(spanned1);//************************************************************************************************************* //mEditTextContent.getSelectionStart()是输入框的光标位置 mEditTextContent.getText().insert(mEditTextContent.getSelectionStart(), spanned);//将表情插入到输入框的光标位置 break; case R.id.button_send_left: ChatMessage message = new ChatMessage(); // 头像 头衔 昵称 时间 信息 message.setImageHead(R.mipmap.ic_launcher); message.setTitle("管理员"); message.setNickName("品"); message.setTime(System.currentTimeMillis()); Log.d("设置的内容", Html.toHtml(mEditTextContent.getText())); message.setMessage(filterHtml(Html.toHtml(mEditTextContent.getText())));// message.setMessage(Html.toHtml(mEditTextContent.getText())); Data.add(message);//将生成信息添加到Data中 mAdapter.notifyDataSetChanged();//通知ListView数据发生改变,需要刷新界面 mListView.setSelection(Data.size()-1);//将信息拉到最后一条 mEditTextContent.setText(" ");//清空输入框的内容 default: break; } } public String filterHtml(String str) { str = str.replaceAll("<(?!br|img)[^>]+>", "").trim(); return str; }}
0 0
- 搭建聊天的界面、输入图片和文本
- 图形界面和文本界面的切换
- 循环和文本输入
- 循环和文本输入
- 循环和文本输入
- 聊天界面cell的搭建
- 华丽的图片和文本装饰
- 图片和文本实现的数据隐藏
- linux 图形界面和文本界面的切换操作方法
- linux 图形界面和文本界面的切换总结
- linux图形界面和文本界面的切换操作方法
- 获取网页中的密码和文本输入框的内容
- c++中循环和文本输入的方法
- jquery修改输入框和文本域的placeholder
- java界面编程(2) ------ 按钮,文本输入框和文本区域
- RDLC加载动态图片和文本的方法
- listview一起显示图片和文本的 源代码
- GridView实现图片和文本的简单显示一
- 网络编程
- 今日头条核心技术“个性推荐算法”揭秘
- POJ-2387 Til the Cows Come Home
- RS485总线最多可以负载多少个设备
- 面试经典问题
- 搭建聊天的界面、输入图片和文本
- java反射机制之基础
- 我和敏捷开发的故事--敏捷角色PO
- 利用json转变Python格式
- OpenGL GLSL
- 删数问题-注意贪心策略-不严格
- [Error]No enclosing instance of type XX is accessible. Must qualify the allocation with an e
- 暑假-二分图-D - Uncle Tom's Inherited Land
- 问题