1、利用九图工具制作(过程百度)
2、效果图:
3、文件(注:要在配置文件增加RecyclerView组件才可以用:compile 'com.android.support:recyc lerview-v7:23.4.0'
)
4、Message.java
package com.example.jcs.myuimessage;
/**
* Created by JCS on 2017/6/25.
*/
//实体类
public class Message {
public static final int TYPE_RECEIVE = 0;
public static final int TYPE_SEND = 1;
private String message;
private int type;
public Message(String message,int type){
this.message = message;
this.type = type;
}
public String getMessage() {
return message;
}
public int getType() {
return type;
}
}
5、MainActivity.java
package com.example.jcs.myuimessage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Message> list = new ArrayList<>();
private RecyclerView recyclerView;
private Button send_right, send_left;
private EditText input;
private MessageAdapter messageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initMessage();
send_right = (Button) findViewById(R.id.right_send_btn);
send_left = (Button) findViewById(R.id.left_send_btn);
input = (EditText) findViewById(R.id.input_Text);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//设置布局
LinearLayoutManager linearMes = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearMes);
messageAdapter = new MessageAdapter(list);
recyclerView.setAdapter(messageAdapter);
//增加right的监听器:发送
send_right.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String content = input.getText().toString().trim();
if (!"".equals(content)) {
Message message = new Message(content, Message.TYPE_SEND);
list.add(message);
//当有新的消息是刷新RecyclerView列表
messageAdapter.notifyItemInserted(list.size() - 1);
//将刚刚输入的定格在最后一行
recyclerView.scrollToPosition(list.size() - 1);
input.setText("");
}
}
});
//增加left的监听器:接收
send_left.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String content1 = input.getText().toString().trim();
if (!"".equals(content1)) {
Message message = new Message(content1, Message.TYPE_RECEIVE);
list.add(message);
messageAdapter.notifyItemInserted(list.size() - 1);
recyclerView.scrollToPosition(list.size() - 1);
input.setText("");
}
}
});
}
public void initMessage() {
Message message1 = new Message("hello!", 0);
Message message2 = new Message("hi!", 1);
Message message3 = new Message("吃饭了吗!", 0);
list.add(message1);
list.add(message2);
list.add(message3);
}
}
6、MessageAdapter.java
package com.example.jcs.myuimessage;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
/*1、定义recyclerview 的思路是把适配器继承Recycler.Adapter<自定义的类名>泛型
*/
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
private List<Message> list;
//当初始化ViewHolder时传来view然后获取传来的布局ID上
static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout linearLayout_left;
LinearLayout linearLayout_right;
TextView textView_left;
TextView textView_right;
public ViewHolder(View itemView) {
super(itemView);
textView_left = (TextView) itemView.findViewById(R.id.test_left);
textView_right = (TextView) itemView.findViewById(R.id.test_right);
linearLayout_left = (LinearLayout) itemView.findViewById(R.id.left_layout);
linearLayout_right = (LinearLayout) itemView.findViewById(R.id.right_layout);
}
}
public MessageAdapter(List<Message> messages) {
this.list = messages;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//把子布局加到父布局中
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_activity, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Message message = list.get(position);
//获取到对应的实体
//判断实体的类型是发送还是接收
//接收:就left的显示隐藏right的,如果是发送的相反
if (message.getType() == message.TYPE_RECEIVE) {
holder.linearLayout_left.setVisibility(View.VISIBLE);
holder.linearLayout_right.setVisibility(View.GONE);
holder.textView_left.setText(message.getMessage());
} else if (message.getType() == message.TYPE_SEND){
holder.linearLayout_left.setVisibility(View.GONE);
holder.linearLayout_right.setVisibility(View.VISIBLE);
holder.textView_right.setText(message.getMessage());
}
}
@Override
public int getItemCount() {
return list.size();
}
}
7、activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
android:background="@color/colorPrimary"
android:orientation="vertical"
tools:context="com.example.jcs.myuimessage.MainActivity"
>
<!--父布局既是发送页面布局-->
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/left_send_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="发送"
/>
<EditText
android:id="@+id/input_Text"
android:layout_weight="3"
android:layout_width="0dp"
android:textColorHint="@color/colorAccent"
android:hint="请输入信息!"
android:layout_height="wrap_content"
android:textColor="#000"
/>
<Button
android:id="@+id/right_send_btn"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="发送"
/>
</LinearLayout>
</LinearLayout>
8、mes_actvity.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="wrap_content"
android:orientation="vertical"
>
<!--定义一个子页面,存放发送信息的-->
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/left"
android:layout_gravity="left">
<TextView
android:id="@+id/test_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:textColor="#000"
android:layout_marginLeft="10dp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/right_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/right"
android:layout_gravity="right">
<TextView
android:id="@+id/test_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_margin="10dp"
android:textColor="#000"
android:layout_marginLeft="5dp"
/>
</LinearLayout>
</LinearLayout>