搭建聊天的界面、输入图片和文本

来源:互联网 发布:中国警察智识数据库 编辑:程序博客网 时间: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
原创粉丝点击