Android开发技巧之像QQ一样输入文字和表情图像

2016-02-19 10:34 42 1 收藏

下面图老师小编要跟大家分享Android开发技巧之像QQ一样输入文字和表情图像,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

EditText和TextView一样,也可以进行图文混排。所不同的是,TextView只用于显示图文混排效果,而EditText不仅可显示,也可混合输入文字和图像,让我们先回顾一下图5.2所示的QQ聊天输入框,在输入框中可以同时输入文字和表情图像。实际上,这种效果在Android SDK中只需要几行代码就可以实现。为了使读者更有学习的冲动,先来欣赏一下即将实现的效果,如图5.16所示。

图5.16 在EditText控件中输入文字和图像
为了实现这个程序,首先来准备一些要用到的素材,也就是要在EditText控件中输入的图像文件。本例准备了9个png图像文件(face1.png至face9.png),都放在了resdrawable目录中。
接下来在屏幕上放一个只能显示3行(可输入多行)的EditText和一个Button,布局文件的代码如下:
代码如下:

?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
EditText android:id="@+id/edittext" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:lines="3" android:gravity="left|top"/
Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="随机插入表情"
android:onClick="onClick_RandomFace" android:layout_marginTop="10dp" /
/LinearLayout

上面代码的EditText标签中将android:gravity属性值设为left|top。以使输入的文本从左上角开始显示,如果不设置该属性,则输入的文本会从左侧中心位置开始显示(由于设置了android:line=”3”,因此,EditText可同时显示三行的内容,所以会存在这个问题,如果只显示一行,则不存在这个问题)。

Button标签的android:onClick属性值指定了单击事件方法(onClick_RandomFace),在该方法中随机获得了face1.png至face9.png中任意一个图像资源的ID。最常用的方法是将这9个图像资源ID放到数组中,然后随机产生一个数组索引来获取相应的图像资源ID。但本例未采用这种方法,而是采用了直接通过反射技术从R.drawable类中获得图像资源ID的方法。这种方法的好处是一但图像资源非常多时,可以不需要在数组中挨个定义就可以获得任意的图像资源ID。

在5.2.2节使用了img标签来插入图像,虽然在EditText控件中插入图像也可采用这种方法。但本例使用了另外一种更简单的方法,就是使用android.text.style.ImageSpan类来直接插入图像。下面来看看具体的实现代码。
代码如下:

public void onClick_RandomFace(View view)
{
// 随机产生1至9的整数
int randomId = 1 + new Random().nextInt(9);
try
{
// 根据随机产生的1至9的整数从R.drawable类中获得相应资源ID(静态变量)的Field对象
Field field = R.drawable.class.getDeclaredField("face" + randomId);
// 获得资源ID的值,也就是静态变量的值
int resourceId = Integer.parseInt(field.get(null).toString());
// 根据资源ID获得资源图像的Bitmap对象
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// 根据Bitmap对象创建ImageSpan对象
ImageSpan imageSpan = new ImageSpan(this, bitmap);
// 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
SpannableString spannableString = new SpannableString("face");
// 用ImageSpan对象替换face
spannableString.setSpan(imageSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 将随机获得的图像追加到EditText控件的最后
edittext.append(spannableString);
}
catch (Exception e)
{
}
}

编写上面代码需要注意如下几点
1. 由于R.drawable中的资源ID都是public的静态变量,因此,可直接使用Field.get方法获得这些变量的值。如果是private或protected的变量,需要field.setAccessible(true)设置变量值的访问权限才可以读写这些变量。
2. 使用Field.get方法获得变量值时,如果是静态变量。Field.get方法的参数值设为null即可。如果不是静态变量,需要为Field.get方法指定一个变量所在类的对象作为参数值。
3. 由于EditText类不能直接插入Span对象,因此,需要先使用SpannableString对象来封装Span对象(如本例中的ImageSpan对象),再将SpannableString对象插入到EditText控件中。

来源:http://www.tulaoshi.com/n/20160219/1595068.html

延伸阅读
标签: 电脑入门
下面的几个技巧主要改变的是使用电脑时最常遇到的一些项目。 1.找回XP风格的开始菜单 右击Vista开始按钮,从弹出的右键菜单中选择属性项,选中传统开始菜单项,最后单击确定即可。这样Vista的开始菜单就又变回 XP系统 的风格,用起来顺手多了。 图1 Vista和XP风格开始菜单比较(图注:Vista的开始菜单,改为在同一窗口中层层打开下级菜...
标签: 怀孕 孕前
单身父母也有精彩的生活 虽然,在所有人当中,单身父母是最艰难的,要单独抚养一个孩子,要承受来自社会各方的压力,还对将来的生活没有很好的展望。但是,只要不总是沉浸在自己的情感折磨和挫折感中,他们还是可以活出自己的色彩的。只要他们了解,一般单身父母都会经历“苦路”、“心路”和“新路”3个阶段,即离婚的痛苦、思想上的挣扎和重...
标签: 分娩
“像牛顿一样”,这不是一句表扬,而是批评,批评在日常生活中由于不用心,犯各种低级错误的行为。天才因为太痴心于某件事情,在生活中常常犯傻,做些令人发笑或令人生气的事,流传下来成为经典故事。可现实生活中出现这类人和事,却多半会被看作“不用心”、“不聪明”,引起人们的不屑或生气。这一点尤其体现在儿童教育中。绝大多数孩子...
标签: 服装搭配
1.淡粉色蕾丝钩花上衣甜美而优雅。裙子的独特设计让整体造型都变得很特别。   2.女神都爱长裙。长裙穿上身很显高,同时也很有气质。所以长裙备受女神们青睐。     3.上班时间怎么穿?一身白色小西装上身,尽显成熟干练。红色高跟鞋增添了色彩与活力。工作时间同样也要美美的。...
标签: 月经
    正常情况下,每次月经量约20毫升~60毫升,当经量少于20毫升(www.tulaoshi.com)时为经量过少,多于80毫升则为经量过多。经量异常通常不能引起足够重视,人们对其的态度可以说是麻痹大意。殊不知,经量就像一面镜子,可以映照出女性体内的多种瑕疵。   主人公:   丽雅上司:持续经量过多。 &nb...

经验教程

87

收藏

95
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部