Android 利用正则+反射+SpannableString展示Emoji表情
来源:互联网 发布:淘宝可以套现吗 编辑:程序博客网 时间:2024/05/17 09:15
Android 利用正则+反射+SpannableString展示Emoji表情
简单实现一下,仅供参考,先给一张图片~~
- 先说下实现的步骤
- 1.从输入的字符串中获取匹配emoji表情名称的子字符串
- 2.利用R.mipmap.class来找到该emoji名称对应的Rid
- 3.利用Rid获取到对应的Drawable
- 4.emoji Drawable转换成ImageSpan
- 5.将原字符串转换成SpannableString,并在读取到的Emoji位置把ImageSpan替换上去
- 6显示在TextView上即可
- 1将众多emoji表情导入mipmap文件夹下,并且名称为“emoxxx”
- 2.布局如下,TextView 和EditText
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp"/> <EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:inputType="text"/></LinearLayout>
- 3.代码如下
public class MainActivity extends AppCompatActivity implements TextWatcher { private TextView tv; private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); et = (EditText) findViewById(R.id.et); et.addTextChangedListener(this); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { changeStrWithEmoji(s.toString()); } @Override public void afterTextChanged(Editable s) { } String TAG = "TAG"; public void changeStrWithEmoji(String input) { //1.匹配字符串input中“[xxx]” Pattern pattern = Pattern.compile("\\[[^\\[\\]]*\\]"); //2.获取匹配器 Matcher matcher = pattern.matcher(input); //3.创建SP SpannableString sp = new SpannableString(input); //4.依次找到字符串input匹配到的子字符串 while (matcher.find()) { //5.获取匹配到的子字符串[emoxxx] String group = matcher.group(); //6.在该字符串开始的位置 与结束的位置 int start = matcher.start(); int end = matcher.end(); Log.d(TAG, group); //7.获取 R.mipmap.class 实例 Class<R.mipmap> mipmapClass = R.mipmap.class; try { //8.去掉[emoxxx] 中括号查找 定义的变量 Field field = mipmapClass.getDeclaredField(group.substring(1, group.length() - 1)); //9 R.mipmap.class 定义的变量都是 static的 可直接获取 int rid = field.getInt(null); Log.d(TAG, rid + ""); //10.获取该[emoxxx]对应的emo Drawable Drawable drawable = getResources().getDrawable(rid); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); //11.在指定的位置设置该 ImageSpan即可 sp.setSpan(new ImageSpan(drawable), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } catch (Exception e) { e.printStackTrace(); } } //12.显示出来 tv.setText(sp); }}
- 完~~
0 0
- Android 利用正则+反射+SpannableString展示Emoji表情
- 使用Lable展示emoji表情
- Android Emoji表情方案
- Android Emoji表情开发
- Android的Emoji表情
- Android过滤emoji表情
- Android 禁止emoji 表情
- Java正则匹配emoji表情
- 【Android】显示Emoji表情字符
- Unified Emoji表情for Android
- Android 开发之 emoji 表情
- android emoji 表情的制作
- android下支持emoji表情
- android 发送屏蔽Emoji表情
- swift 正则表达式 判断Emoji表情
- emoji表情在web的展示与mysql存储方式
- emoji表情在web的展示与mysql存储方式
- emoji表情在web的展示与mysql存储方式
- JAVA WEB学习(二)
- bzoj 1208 宠物收养所 Splay
- 关于hadoop job中job.setOutputFormatClass和FileOutputFormat.setOutputPath容易报错的问题
- durid “register mbean error”解决办法
- 为什么要使用异步任务
- Android 利用正则+反射+SpannableString展示Emoji表情
- 紫色——三色配色篇
- 教你如何在GridView的Item中实现“仿携程首页的按钮”点击缩放效果
- 阔别的很久的博客——熄灯问题
- dwz与xhEditor整合后父子页面的input框有时获取不到焦点的问题
- Sqoop 实际应用及样例
- Ref && Out
- 紫色——五色配色篇
- 任务3:显示GUI图形界面