Android 端如何添加自定义表情

实现步骤

1.新建 RongEmoticonTab 类继承 IEmoticonTab 。

public class RongEmoticonTab implements IEmoticonTab {    public RongEmoticonTab() {    }    @Override    public Drawable obtainTabDrawable(final Context context) {        return context.getResources().getDrawable(R.drawable.u1f603);    }    @Override    public View obtainTabPager(Context context) {        return view;    }    @Override    public void onTableSelected(int i) {    }}

2.在 obtainTabPager 中添加您想要展示在表情面板上的 view 。

    @Override    public View obtainTabPager(Context context) {        View view = LayoutInflater.from(context).inflate(R.layout.view_emoji, null);        RecyclerView rv = view.findViewById(R.id.recycler_view);        //LinearLayoutManager是用来做列表布局,也就是单列的列表        GridLayoutManager mLayoutManager = new GridLayoutManager(context, 5, OrientationHelper.VERTICAL, false);        rv.setLayoutManager(mLayoutManager);        //谷歌提供了一个默认的item删除添加的动画        rv.setItemAnimator(new DefaultItemAnimator());        rv.setHasFixedSize(true);        //模拟列表数据        ArrayList newsList = new ArrayList<>();        TypedArray array = context.getResources().obtainTypedArray(context.getResources().getIdentifier("rc_emoji_res", "array", context.getPackageName()));        int i = -1;        while (++i < array.length()) {            newsList.add(array.getResourceId(i, -1));        }        rv.setAdapter(new NewsAdapter(newsList));        return view;    }

3.Adapter 和布局文件可以参考GitHub
4.自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getEmoticonTabs() 方法,返回需要展示的 EmoticonTab 列表。

public class MyExtensionModule extends DefaultExtensionModule {    private RongEmoticonTab rongEmoticon;    @Override    public List getEmoticonTabs() {        List emoticonTabs =  super.getEmoticonTabs();        RongEmoticonTab emojiTab=new RongEmoticonTab();        emoticonTabs.add(myEmoticon);        return emoticonTabs;    }}

5.在初始化之后,取消 SDK 默认的 ExtensionModule,注册自定义的 ExtensionModule, 如下:

public void setMyExtensionModule() {    List moduleList = RongExtensionManager.getInstance().getExtensionModules();    IExtensionModule defaultModule = null;    if (moduleList != null) {        for (IExtensionModule module : moduleList) {            if (module instanceof DefaultExtensionModule) {                defaultModule = module;                break;            }        }        if (defaultModule != null) {            RongExtensionManager.getInstance().unregisterExtensionModule(defaultModule);            RongExtensionManager.getInstance().registerExtensionModule(new MyExtensionModule());        }    }}

6.如果需要网络下载表情需要下载并持久化表情数据,需要在添加 EmoticonTab 前下载好表情数据。

更多相关文章

  1. Android(安卓)签名失败 Lint found fatal errors while assembli
  2. [置顶] Android(安卓)[Dex Loader] Unable to execute dex:
  3. Android(安卓)3D 旋转的三角形(四)
  4. AndroidStudio打包出现问题: `Error:Execution failed for task
  5. Unable to find suitable jdk installaion
  6. Android(安卓)之 添加按钮添加声音
  7. Android(安卓)BaseAdapter如何获得每一项并添加按钮事件
  8. Android(安卓)发布项目到私服Nexus仓库
  9. 编译Android时,添加或者删除system.img中第三方apk、更改Android

随机推荐

  1. Android(安卓)resource compilation fail
  2. Android(安卓)通过接口的方式去调用服务
  3. android 根据pid 获取进程名
  4. android中 utc 和 当地时间的转换
  5. android 多渠道打包,build.gradle文件配置
  6. android使用Intent操作拨打号码发送短信
  7. Java(Android)对文件全文生成MD5摘要
  8. 【android开发】之【android动态布局方法
  9. Android(安卓)MedaiPlayer类的简单介绍
  10. android实现事件监听的2种常用方式