思路:
1、用RecycleView加载表情
2、每一个表情对应一个key
3、输入聊天框:自定义监听EditText获取到内容,找出内容包含的key,将key替换成图片
4、显示聊天记录:同理,自定义TextView
按照上面的思路完成功能:
第一步:引入图片
将所有的表情图片引入到drawable(或者加入压缩包,代码解压缩包,本地引入)
我是摸鱼摆烂,直接引入到drawable里的,哈哈哈哈
文件命名格式最好有规律,方便CV
第二步:创建表情List以及map
(List是RecycleView展示用,Map是监听文字内容包含的key,查找替换图片,用List还需循环)
创建实体类,方便引用
public class EmojiBean {
private String code;
private int icon;
public EmojiBean(String code, int icon) {
this.code = code;
this.icon = icon;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
@Override
public String toString() {
return "EmojiBean{" +
"code='" + code + '\'' +
", icon=" + icon +
'}';
}
}
创建List以及Map
import android.os.Build;
import com.okcis.linphone_demo.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class EmojiManager {
public static final List<EmojiBean> EMOJI_LIST = new ArrayList<>();
public static Map<String, Integer> EMOJI_MAP = new HashMap<>();
public EmojiManager(){
// 初始化表情数据
EMOJI_LIST.add(new EmojiBean("[微笑]", R.drawable.emoji_0));
EMOJI_LIST.add(new EmojiBean("[撇嘴]", R.drawable.emoji_1));
//....省略
EMOJI_LIST.add(new EmojiBean("[转圈]", R.drawable.emoji_108));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//将List转为Map,时代在发展,暂时不考虑N以下的设备
EMOJI_MAP = EMOJI_LIST.stream().collect(Collectors.toMap
(EmojiBean::getCode, EmojiBean::getIcon, (value1, value2) -> value1));
}
}
public static List<EmojiBean> getEmoticonList() {
return EMOJI_LIST;
}
public static Map<String, Integer> getEmoticonMap() {
return EMOJI_MAP;
}
}
将整个功能模块封装
加入到RecycleView
import android.content.Context;
import android.view.View;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.okcis.linphone_demo.R;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiBean;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiCallback;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiManager;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiAdapter;
import java.util.List;
public class EmojiView {
private Context mContext;
private View emojiView;
private EmojiCallback mEmojiCallback;
public EmojiView(Context context){
mContext = context;
initView();
}
private void initView(){
emojiView = View.inflate(mContext, R.layout.chat_emoji_view_layout, null);
EmojiManager emojiManager = new EmojiManager();
RecyclerView recyclerView = emojiView.findViewById(R.id.recyclerView_emoji);
List<EmojiBean> items = emojiManager.getEmoticonList();
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(mContext, 8