升级指南

优质
小牛编辑
121浏览
2023-12-01

如果您的项目中集成了BQMM的v1.x版本,在升级到v2.1时会需要对代码进行一些额外的修改。本指南列出了v2.1在集成步骤上与v1.x的不同之处,以供参考。

增加新的Activity

这个版本新增了作者主页功能,可以方便用户查找和下载某一个作者名下的表情包。作者主页是一个新的Activity,需要在AndroidManifest中进行注册。

AndroidManifest.xml

<application>
    <activity
        android:name="com.melink.bqmmsdk.ui.store.AuthorDetail"
        android:screenOrientation="portrait" />
</application>

增加搜索弹窗

1. 引入代码

BQMM在v2.0版本加入了Gif搜索功能,并实现了一个新的搜索弹窗,取代v1.x的联想弹窗。为了方便定制,搜索弹窗以源代码的形式被放在了Demo中,您需要将其拷贝到自己的项目中去。

搜索弹窗的代码一般被放在名为“bqmmgif”的包下。以简单Demo为例,在项目中找到com.siyanhui.mojif.demo.bqmmgif包(路径为/src/com/siyanhui/mojif/demo/bqmmgif/ ),可以看到其中包含四个文件:

BQMMGifManager.java
BQMMSearchContentAdapter.java
BQMMSearchPopupWindow.java
IBqmmSendGifListener.java

将这个包复制到自己项目的代码树中去,并且(如果包路径和Demo中不一样的话)修改一下上述四个java文件头部的包名信息,即可完成代码的引入。

2. 实现搜索功能

上一步引入的四个文件实现的功能可以分为三块:

  • 搜索弹窗UI(BQMMSearchPopupWindow.java、BQMMSearchContentAdapter.java)
  • 发送表情回调(IBqmmSendGifListener.java)
  • 弹窗的收放、翻页、点击项目等操作(BQMMGifManager.java)

前两块如果没有定制需求可以不用关心,而第三块功能,即BQMMGifManager这个类提供了一些函数,需要在向BQMM注册键盘时调用。

final BQMM bqmm = BQMM.getInstance();
final BQMMGifManager bqmmGifManager = BQMMGifManager.getInstance();
//注册键盘的同时需要传入一个回调。v2.x在表情键盘上增加了一个GIF按钮,在该按钮被点击后传入的回调就会被调用。我们在回调中隐藏表情键盘并显示搜索弹窗。
bqmm.setKeyboard(emoticonPickerView, new IGifButtonClickListener() {
    @Override
    public void didClickGifTab() {
        emoticonPickerView.hideKeyboard();
        showInputMethod(messageEditText);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                bqmmGifManager.showTrending();
            }
        }, 500);
    }
});
//增加一些监听,在合适的时机自动关闭弹窗。具体逻辑请参考代码。
bqmmGifManager.addEditViewListeners();

3. 实现Gif表情的封装与发送

Gif表情是一种新的表情,需要新增一些代码进行封装和发送。需要封装进消息的字段一共有五个,缺一不可:

  • ID
  • 高度
  • 宽度
  • 图片URL
  • 是否为Gif图片
bqmmGifManager.setBQMMSendGifListener(new IBqmmSendGifListener() {
    @Override
    public void onSendBQMMGif(BQMMGif bqmmGif) {
        org.json.JSONObject gifJsonObject = new org.json.JSONObject();
        try {
            gifJsonObject.put("data_id", bqmmGif.getSticker_id());
            gifJsonObject.put("h", bqmmGif.getSticker_height());
            gifJsonObject.put("w", bqmmGif.getSticker_width());
            gifJsonObject.put("sticker_url", bqmmGif.getSticker_url());
            gifJsonObject.put("is_gif", bqmmGif.getIs_gif());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        HashMap<String, Object> params = new HashMap<>();
        params.put(BQMMConstants.BQMM_MSG_TYPE, BQMMConstants.BQMM_MSG_TYPE_GIF);
        params.put(BQMMConstants.BQMM_MSG_DATA, gifJsonObject);
        //TODO: params中已经封装好了Gif表情的所有信息,在具体项目中需要调用通信SDK的对应方法进行发送。
    }
});

4. 实现Gif表情的解析和展示

解析的过程和封装是对应的,这里不再赘述。将五个字段取出之后,我们可以用BQMMMessageText将它展示出来:

//bqmmMessageText为UI中的BQMMMessageText示例
//data_id、sticker_url、w、h、is_gif为从消息中解析出的对应字段
bqmmMessageText.showBQMMGif(data_id, sticker_url, w, h, is_gif);

定制消息样式

BQMMMessageText这个控件原先继承的是TextView,如今改成了FrameLayout,这会影响到对消息样式的定制。如果您之前在布局xml中指定过这个控件的android:textColorandroid:textSize等属性的话,升级之后会发现这些属性失效了。

在新版中,如果要定制消息文本的样式,目前有几种方法:

  1. 修改style:在BQMM_Lib模块的res文件夹中有一个styles.xml,在这一版本增加了名为BQMMMessageText的style。原先在xml中对TextView指定的属性可以被移动到这里。在这个style中的属性会对所有的BQMMMessageText生效。
  2. 在构造函数中传入style:与上一个方法类似,只是style改用BQMMMessageText(@NonNull Context context, @StyleRes int textStyle)这个构造函数指定。
  3. 用代码设置:BQMMMessageText实现了setTextColorsetMaxWidth等几个函数,以方便开发者用代码设置常用的样式。