写点什么

Android 端如何添加自定义表情

发布于: 2021 年 03 月 15 日

##实现步骤 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 和布局文件可以参考GitHub4.自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getEmoticonTabs() 方法,返回需要展示的 EmoticonTab 列表。


public class MyExtensionModule extends DefaultExtensionModule {
复制代码


    private RongEmoticonTab rongEmoticon;
复制代码


    @Override
复制代码


    public List<IEmoticonTab> getEmoticonTabs() {
复制代码


        List<IEmoticonTab> emoticonTabs =  super.getEmoticonTabs();
复制代码


        RongEmoticonTab emojiTab=new RongEmoticonTab();
复制代码


        emoticonTabs.add(myEmoticon);
复制代码


        return emoticonTabs;
复制代码


    }
复制代码


}
复制代码

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


public void setMyExtensionModule() {
复制代码


    List<IExtensionModule> 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 前下载好表情数据。


用户头像

还未添加个人签名 2021.01.26 加入

还未添加个人简介

评论

发布
暂无评论
Android 端如何添加自定义表情