1、用通过Nine-Patch制作好的气泡图片作为图片资源。

2、在app/build.gradle中添加依赖库,使用RecyclerView。

compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

3、编写activity_main.xml文件,放置用于显示聊天内容界面,EditText用于输入消息,Button用于输入消息。

                        

4、创建Msg消息实体类

public class Msg {    public static final int TYPE_RECEIVED = 0;    public static final int TYPE_SENT = 1;    private  String content;    //消息内容    private int type;           //消息类型    public Msg(String content, int type) {        this.content = content;        this.type = type;    }    public String getContent() {        return content;    }    public int getType() {        return type;    }}

5、编写RecyclerView子项布局msg_item.xml,让收到的消息左对齐,发出的消息右对齐。

                                

6、新建适配器类MsgAdapter类

public class MsgAdapter extends RecyclerView.Adapter {    private List mMsgList;    static class ViewHolder extends RecyclerView.ViewHolder{        LinearLayout leftLayout;        LinearLayout rightLayout;        TextView leftMsg;        TextView rightMsg;        public ViewHolder(View view) {            super(view);            leftLayout = view.findViewById(R.id.left_layout);            rightLayout = view.findViewById(R.id.right_layout);            leftMsg = view.findViewById(R.id.left_mes);            rightMsg = view.findViewById(R.id.right_mes);        }    }    public MsgAdapter(List mMsgList) {        this.mMsgList = mMsgList;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item,parent,false);        return new ViewHolder(view);    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {          Msg msg = mMsgList.get(position);//消息类型判断,如果收到消息,则显示左边消息布局,隐藏右边消息布局//如果发出消息,则显示右边消息布局,隐藏左边消息布局          if(msg.getType() == msg.TYPE_RECEIVED){              holder.leftLayout.setVisibility(View.VISIBLE);              holder.rightLayout.setVisibility(View.GONE);              holder.leftMsg.setText(msg.getContent());          }        else if(msg.getType() == msg.TYPE_SENT){              holder.rightLayout.setVisibility(View.VISIBLE);              holder.leftLayout.setVisibility(View.GONE);              holder.rightMsg.setText(msg.getContent());          }    }    @Override    public int getItemCount() {        return mMsgList.size();    }}

7、编写MainActivity.java中代码

public class MainActivity extends AppCompatActivity {    private List msgList = new ArrayList<>();    private EditText inputText;    private Button send;    private RecyclerView msgRecyclerView;    private MsgAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initMsg();        inputText = (EditText) findViewById(R.id.input_text);        send = (Button) findViewById(R.id.send);        msgRecyclerView = (RecyclerView) findViewById(R.id.msg_recycler_view);        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        msgRecyclerView.setLayoutManager(layoutManager);        adapter=new MsgAdapter(msgList);        msgRecyclerView.setAdapter(adapter);        send.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                String content = inputText.getText().toString();//如果输入消息不为空,创建新的Msg对象加入到msgList中                if(!"".equals(content)){                    Msg msg=new Msg(content,Msg.TYPE_SENT);                    msgList.add(msg);//当有新消息时,通知列表有新数据加入,刷新RecyclerView中的显示                    adapter.notifyItemInserted(msgList.size()-1);//将显示的数据定位到最后一行,保证一定能看到最后发出的一行数据                    msgRecyclerView.scrollToPosition(msgList.size()-1);                    inputText.setText("");                }            }        });    }//创建消息数据    private void initMsg() {        Msg msg1 = new Msg("Hello Guys" ,Msg.TYPE_RECEIVED);        msgList.add(msg1);        Msg msg2 = new Msg("Who is that" ,Msg.TYPE_SENT);        msgList.add(msg2);        Msg msg3 = new Msg("This is Tom" ,Msg.TYPE_RECEIVED);        msgList.add(msg3);    }}

 

更多相关文章

  1. Android:阴影效果的另一种实现方法:layer-list
  2. Android卡片组件(CardView)
  3. Android(安卓)Power Key Message
  4. 学习Android之SimpleAdapter显示网络图片
  5. Android(安卓)软键盘自动弹出和关闭
  6. android通过线程实现逐行显示信息
  7. android之Pickers
  8. Android(安卓)TextInputLayout,打造 Material Design 风格的文本
  9. CCSprite在Android平台下显示SDCard中的图片

随机推荐

  1. android手势翻页效果【转】
  2. Android(安卓)Jetpack组件学习 ViewModel
  3. android读取properties配置文件
  4. Android(安卓)emulator中的system.img,use
  5. Android常用的15个框架
  6. android切换到后台图片纹理丢失的解决方
  7. Android基本控件和事件以及消息总结
  8. Android(安卓): 登录并保存密码
  9. Android(安卓)修改app图标和名称的方法
  10. C# android base-64 字符数组的无效长度