`
昔雪似花
  • 浏览: 204303 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

像QQ一样输入表情图像

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

图5.16  在EditText控件中输入文字和图像

     为了实现这个程序,首先来准备一些要用到的素材,也就是要在EditText控件中输入的图像文件。本例准备了9个png图像文件(face1.png至face9.png),都放在了res\drawable目录中。
接下来在屏幕上放一个只能显示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控件中。
分享到:
评论

相关推荐

    html输入QQ 表情

    1. 创建表情库:首先,你需要一个包含所有QQ表情的图像资源库。这些表情通常是以.png或.gif格式的图片,可以下载自QQ的官方表情包。将这些表情图片存储在一个本地目录或者服务器上,并为每个表情分配一个唯一的...

    实现QQ的输入表情的功能

    在Android开发中,实现类似QQ的输入表情功能是一项常见的需求,尤其对于聊天应用而言,丰富的表情可以增强用户的表达效果和沟通体验。这个话题主要涉及到`EditText`组件的使用以及表情库的集成。以下是对这个主题的...

    自定义文本框输入qq表情

    在IT领域,自定义文本框输入QQ表情是一个常见的需求,特别是在聊天应用、社交平台或论坛等需要用户互动的场景中。QQ表情作为一种流行的网络表情符号,丰富了人们的在线交流方式,使得文字信息更加生动有趣。要实现这...

    仿qq表情输入控件

    在IT行业中,开发一款仿QQ表情输入控件是一项常见的任务,尤其在移动应用开发领域,如安卓(Android)平台。QQ作为中国最流行的即时通讯软件之一,其丰富的表情系统深受用户喜爱,因此开发者们常常会尝试复制这一...

    仿qq表情控件

    总结来说,“仿qq表情控件”是一种结合了emoji的UI组件,它的设计和实现涉及到前端开发、图像处理、数据存储以及用户体验等多个方面的技术。通过这样的控件,用户可以更生动地表达情绪,提高沟通的趣味性。在实际...

    Android 模仿手机QQ表情输入和表情预览框

    在Android开发中,模仿手机QQ的表情输入和表情预览框是一项常见的需求,它涉及到用户界面设计、图片资源管理以及事件处理等多个方面的技术。本项目旨在实现一个类似功能,通过分析和学习,我们可以深入理解Android ...

    仿QQ输入表情

    在Android开发中,仿QQ输入表情是一个常见的需求,特别是在构建聊天应用时。这个主题涉及到的主要知识点包括Android UI设计、自定义视图、表情库的使用和管理,以及数据存储。 首先,我们需要理解Android的UI系统。...

    QQ表情功能实现

    - 需要监听输入框的文本变化,以便在用户输入表情代码时实时更新预览。同时,也要处理用户点击表情图标的事件,将选中的表情插入到当前光标位置。 6. **兼容性**: - 考虑到不同Android版本和设备的兼容性,需要...

    qq表情 点击图片出现qq表情,选中提交到文本框

    标题和描述所提到的“点击图片出现qq表情,选中提交到文本框”,描述的是一个特定的技术实现过程,涉及到了图像处理、用户交互以及前端开发技术。 首先,我们来理解这个过程的核心部分。当用户点击一个图片时,系统...

    QQ个性表情图片自动生成

    QQ个性表情图片自动生成工具是一种创新的通讯辅助软件,它能将用户在聊天窗口中输入的文字信息实时转化为趣味性十足的图片,为QQ聊天增添了更多个性化元素。通过安装kaakooSetup_38588.exe这个执行文件,用户可以...

    类似于QQ发送表情的功能

    在用户选择表情后,需要将表情图片转换为适合在RichTextBox中显示的格式,如位图数据或嵌入式图像资源。 5. **字符串处理**:表情通常用特定的字符组合或者表情代码表示,如`:smile:`或`[微笑]`。当用户选择表情后...

    QQ2017默认表情包PNG

    QQ表情的使用方法通常是通过QQ聊天窗口内的表情面板来选取,用户可以轻松点击或输入特定快捷键来发送表情。此外,QQ还允许用户自定义表情包,将自己喜欢的图片添加到表情库中,进一步丰富了聊天时的表达方式。 在...

    仿qq表情输入

    在Android应用开发中,"仿qq表情输入"是一项常见的需求,尤其在聊天、社交类应用中,用户常常需要使用各种表情来表达情感。QQ作为一款知名的即时通讯软件,其丰富的表情库深受用户喜爱。本项目的目标是实现一个类似...

    Android 仿QQ表情(输入和显示)

    在Android开发中,实现类似QQ的表情输入和显示功能是一项常见的需求,特别是在聊天应用或者社交软件中。本项目通过源码的方式,为我们展示了如何在Android应用中实现这一特性。以下是关于这个话题的一些关键知识点:...

    EditText中输入表情和文字

    要实现像QQ那样在`EditText`中同时输入表情和文字的功能,我们需要进行一些自定义处理。以下是一些关键知识点和实现步骤: 1. **自定义输入法键盘(InputMethodService)** - Android系统提供了`...

    一个可实现像QQ一样的输入控件

    【标题】中的“一个可实现像QQ一样的输入控件”指的是一个特定类型的用户界面元素,类似于QQ聊天应用中的文本编辑框。在QQ等即时通讯软件中,用户不仅可以输入文字,还可以插入图片、表情、按钮以及超链接,提供丰富...

    仿QQ对话框 添加表情

    - 发送按钮事件:监听发送按钮的点击,获取输入框中的内容,处理表情标识符,将其转换为对应的表情图像,并将消息发送出去。 5. **消息格式化**: - 混合文本与表情:处理文本和表情的混合显示,比如使用Markdown...

    QQ拼音如何设置表情输入.docx

    使用QQ拼音输入表情有四种主要方法: 1. 方法一:直接输入表情对应的拼音串,当表情候选词出现时,选择序号,按回车键即可上屏。 2. 方法二:在输入状态下,按下分号键";",会弹出拼音表情输入面板,从中选择喜欢...

    仿QQ发送表情

    1. **表情库**:QQ的表情库包含了大量预设的表情图片或动画,这些图片通常被组织成特定的格式,如GIF、PNG或SVG等。在我们的项目中,也需要建立一个类似的表情库,包含各种常见和有趣的表情。 2. **表情选择界面**...

Global site tag (gtag.js) - Google Analytics