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 数据库SQLite的操作总结
  2. Android:BaseMultiItemQuickAdapter打造嵌套/多级列表
  3. Android中利用Intent传递数据到另一个页面
  4. android 如何从sqlite读取数据到spinner下拉中显示
  5. android中的Sqlite数据库操作
  6. Android用surface直接显示yuv数据
  7. 【Android】HTTP请求远端String和byte[]数据
  8. Android 列表之分组ListView

随机推荐

  1. Android(安卓)TabActivity实现多页显示效
  2. 常用对话框部分属性
  3. android SDCARD 读写操作
  4. Android从下往上(动画)滑出窗口
  5. Android(安卓)linux kernel privilege es
  6. TabLayout修改字体大小
  7. Android之Init进程
  8. 发送短信之分割短信 SMSManager
  9. android recycler添加分割线 点击事件等
  10. android 完全关闭进程