android表情和功能键盘,LQREmojiLibrary

LQREmojiLibrary

网易云信表情功能抽离,支持经典表情及贴图,加入仿微信软键盘切换时平滑过渡

##一、引用初始化

###1、在自定义的Application使用LQRUIKit进行初始化

public class App extends Application {

@Override

public void onCreate() {

super.onCreate();

... your code ...

LQRUIKit.init(getApplicationContext());

... your code ...

}

}

###2、在AndroidManifest.xml中引用自定义的Application

android:name=".App"

android:theme="@style/AppTheme">

##二、表情与贴图功能集成

###1、在需要集成表情的功能的布局中设置以下代码

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.lqr.MainActivity">

... your code ...

android:id="@+id/messageEditText"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

android:id="@+id/epv"

android:layout_width="wrap_content"

android:layout_height="180dp"/>

###2、代码中使用(看注释)

messageEditText = (EditText) findViewById(R.id.messageEditText);

mEpv = (EmoticonPickerView) findViewById(R.id.epv);

mEpv.setWithSticker(true);//开启贴图功能

mEpv.show(this);//显示表情视图并设置监听

mEpv.attachEditText(messageEditText);//把EditText交给EmoticonPickerView控制

mEpv.setVisibility(View.VISIBLE);//开关表情贴图控件

###3、常用方法说明

####1)EmoticonPickerView

1. attachEditText:将EditText交给EmotionView保管,点击表情时自动插入表情

2. setWithSticker:是否开启贴图功能

3. show(IEmoticonSelectedListener listener):显示表情视图并设置点击监听(监听表情、贴图的点击事件)

####2)MoonUtil

1. replaceEmoticons:EditText用来转换表情文字的方法,如果没有使用EmoticonPickerView的attachEditText方法,则需要开发人员手动调用方法来又识别EditText中的表情

2. identifyFaceExpression:识别表情(RecyclerView或ListView中的item显示时会用到,以下一样)

3. identifyFaceExpressionAndATags:识别表情和标签(如:只需显示a标签对应的文本)

4. identifyFaceExpression:识别表情,可设置缩放大小

5. identifyFaceExpressionAndTags:识别表情和标签(如:只需显示a标签对应的文本),可设置缩放大小

例子:

1. MoonUtil.identifyFaceExpression(getActivity(), tvMsg, content, ImageSpan.ALIGN_BOTTOM);//表情正常大小显示

2. MoonUtil.identifyFaceExpression(getActivity(), tvMsg, content, ImageSpan.ALIGN_BOTTOM, 4.5f);//表情缩放显示

####3)StickerManager

1. getStickerBitmapUri:根据目录名(catalog)和贴图名(chartlet)得到对应贴图在asset中的uri

例子:

1. String uri = StickerManager.getInstance().getStickerBitmapUri(attachment.getCatalog(), attachment.getChartlet());

###4、注意

该库使用了universal-image-loader。所以如果在项目中不要再次引入universal-image-loader。

该库可以自定义贴图表情,但是写死了表情的类别名,分别是:ajmd、xxy、lt(在StickerManager类中定义的)。贴图需要放在自己工程的assets目录即可。一类贴图需要一个文件夹(存放贴图)和两张底部图片,注意命名规则,关系如下图:

f14fbe0e4b6fcd31a3f7c8c8b332a289.png

##三、仿微信软键盘出现时输入框高度不变

EmotionKeyboard这个类可以模仿微信的切换软键盘与表情控件时不出现跳闪,真正做到平滑过渡。

/**

* 初始化表情软键盘

*/

private void initEmotionKeyboard() {

//1、创建EmotionKeyboard对象

mEmotionKeyboard = EmotionKeyboard.with(this);

//2、绑定输入框控件

mEmotionKeyboard.bindToEditText(mEtContent);

//3、绑定输入框上面的消息列表控件(这里用的是RecyclerView,其他控件也可以,注意该控件是会影响输入框位置的控件)

mEmotionKeyboard.bindToContent(mCvMessage);

//4、绑定输入框下面的底部区域(这里是把表情区和功能区共放在FrameLayout下,所以绑定的控件是FrameLayout)

mEmotionKeyboard.setEmotionView(mFlButtom);

//5、绑定表情按钮(可以绑定多个,如微信就有2个,一个是表情按钮,一个是功能按钮)

mEmotionKeyboard.bindToEmotionButton(mIvEmo, mIvAdd);

//6、当在第5步中绑定了多个EmotionButton时,这里的回调监听的view就有用了,注意是为了判断是否要自己来控制底部的显隐,还是交给EmotionKeyboard控制

mEmotionKeyboard.setOnEmotionButtonOnClickListener(new EmotionKeyboard.OnEmotionButtonOnClickListener() {

@Override

public boolean onEmotionButtonOnClickListener(View view) {

if (mBtnVoice.getVisibility() == View.VISIBLE) {

hideBtnVoice();

}

//输入框底部显示时

if (mFlButtom.getVisibility() == View.VISIBLE) {

//表情控件显示而点击的按钮是ivAdd时,拦截事件,隐藏表情控件,显示功能区

if (mEpv.getVisibility() == View.VISIBLE && view.getId() == R.id.ivAdd) {

mEpv.setVisibility(View.GONE);

mLlButtomFunc.setVisibility(View.VISIBLE);

return true;

//功能区显示而点击的按钮是ivEmo时,拦截事件,隐藏功能区,显示表情控件

} else if (mLlButtomFunc.getVisibility() == View.VISIBLE && view.getId() == R.id.ivEmo) {

mEpv.setVisibility(View.VISIBLE);

mLlButtomFunc.setVisibility(View.GONE);

return true;

}

} else {

//点击ivEmo,显示表情控件

if (view.getId() == R.id.ivEmo) {

mEpv.setVisibility(View.VISIBLE);

mLlButtomFunc.setVisibility(View.GONE);

//点击ivAdd,显示功能区

} else {

mEpv.setVisibility(View.GONE);

mLlButtomFunc.setVisibility(View.VISIBLE);

}

}

return false;

}

});

}

上面回调中的内容是我自己仿微信项目中的代码(不是当前项目中的例子!!),开发中需要根据自己项目的需求来编码,这里不去掉是为了帮助需要的人理解该回调的作用。最后附上效果图:

baa122662d3b107aa13dfc137cadca06.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值