第一步:创建SmiliesEditText类继承EditText如下:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.util.AttributeSet;
import android.widget.EditText;
public class SmiliesEditText extends EditText {
public SmiliesEditText(Context context) {
super(context);
}
public SmiliesEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
//在编辑框顶部添加图片
public void setDrawableTop(Drawable top) {
setCompoundDrawablesWithIntrinsicBounds(null, top, null, null);
}
//在编辑框顶部添加图片
public void setDrawableTop(int top) {
setCompoundDrawablesWithIntrinsicBounds(0, top, 0, 0);
}
//在编辑框顶部左边图片
public void setDrawableRight(int right) {
setCompoundDrawablesWithIntrinsicBounds(0, 0, right, 0);
}
//在编辑框左边添加图片
public void setDrawableLeft(int left) {
setCompoundDrawablesWithIntrinsicBounds(left, 0, 0, 0);
}
//在编辑框底部添加图片
public void setDrawableButtom(int buttom) {
setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, buttom);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
//在编辑框内添加图片或者表情
public void insertIcon(int id) {
SpannableString ss = new SpannableString(getText().toString()
+ "[smile]");//new一个SpannableString里面包含EditText已有内容,另外添加一个字符串[smile]用于在后面替换一个图片
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);//将图片实例化为一个ImageSpan型
ss.setSpan(span, getText().length(),
getText().length() + "[smile]".length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//将ImageSpan代替之前添加的[smile]字符串
setText(ss);
}
}
第二步:设计xml如下:也可以在activity中直接new一个控件出来
<RelativeLayout 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:background="#bfbfbf"
>
<com.example.widget.SmiliesEditText
android:id="@+id/edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="@dimen/padding_medium" />
</RelativeLayout>
第三步:编写MainActivity类作为演示控件是否实现了需要的功能
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import com.example.widget.SmiliesEditText;
public class MainActivity extends Activity {
private SmiliesEditText edit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (SmiliesEditText) this.findViewById(R.id.edit);
edit.append("大家好");
edit.setDrawableRight(R.drawable.bottle_close_frame_highlight);
edit.insertIcon(R.drawable.e40f);
edit.append("哈哈哈");
}
}
第四步:运行结果如图:
- 大小: 20.1 KB
分享到:
相关推荐
本文将深入探讨如何在Android平台上处理和显示表情文字,包括基本概念、实现方式以及相关的技术难点。 一、表情文字概述 表情文字,也被称为颜文字或emoji,是通过特定字符组合或图形来表达情感或情绪的一种方式。...
本教程将详细讲解如何使用和自定义EditText,包括其样式、背景、光标以及添加删除按钮,并防止弹出软键盘。 一、EditText的基础使用 EditText是TextView的子类,它具有文字输入和编辑的功能。在XML布局文件中,可以...
在本文中,我们将详细介绍Android自定义控件EditText的使用方法,包括自定义控件的分类、自定义EditText的实现步骤、attrs.xml的编写、MyEditText布局的实现、点击事件的实现等内容。 一、自定义控件的分类 ...
以下将详细讲解如何在Android的TextView或EditText中添加自定义表情。 一、表情资源管理 首先,你需要准备一套自定义的表情图片资源,可以是SVG矢量图或者PNG/JPEG格式的位图。这些图片需要存储在项目的res/...
2. **Rect对象**: 在Android中,`Rect`类用于表示一个矩形区域,包含四个整数属性:`left`, `top`, `right`, 和 `bottom`,分别表示矩形的左边界、上边界、右边界和下边界。在画矩形时,你可以创建一个Rect对象并用...
本章"Android简单控件的开发及应用"主要聚焦于Android SDK中的常见UI控件,如按钮、文本框、图像视图等,以及如何在布局文件中创建和配置这些控件,以及在代码中对它们进行事件处理。 一、基础控件介绍 1. Button...
- 用途:分别使控件在水平方向或垂直方向上居中。 - 示例:`android:layout_centerHorizontal="true" android:layout_centerVertical="true"` - **android:layout_alignParent[Top|Bottom|Left|Right]** - 用途...
此外,可以使用`android:drawableLeft`、`android:drawableRight`等属性在文本旁添加图片,实现图文混排。 除了基本属性,TextView还提供了丰富的API接口。例如,可以使用`setText()`方法动态改变文本内容,`...
这里可能需要用到setCompoundDrawablesWithIntrinsicBounds()方法来设置左右或上下四个方向的复合图形(包括图标)。同时,需要处理触摸事件,确保用户可以在文本框内正常输入。 至于全屏背景图片,这涉及到...
2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 ...
Android中的布局管理器包括LinearLayout、RelativeLayout、FrameLayout、GridLayout和ConstraintLayout等,它们决定了UI组件在屏幕上的排列方式。 1. LinearLayout:按照垂直或水平方向线性排列子视图。 2. ...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
Android SDK提供了丰富的UI控件,如TextView、Button、EditText、ImageView等,这些控件可以通过XML布局文件或者代码动态添加。 1. **TextView**:用于显示文本,可设置字体、颜色、大小等样式。 2. **Button**:...
在Android应用开发中,基础UI(用户界面)设计是至关重要的一步,因为它直接影响到用户的体验和交互性。本章节将深入探讨Android UI设计的核心概念、组件以及布局管理器。 一、Android UI组件 Android提供了丰富的...
同时,也涉及到了Android设备上的传感器使用,如加速度计、陀螺仪等,以及如何通过SensorManager获取和处理传感器数据。这些内容对于开发涉及多媒体功能或运动跟踪的应用非常重要。 ### 第五章:动画与图形 第五...
在Android平台上开发小游戏,如"看图猜成语"这样的应用,涉及到多个技术层面。下面将详细探讨这些技术点,以及如何构建这样的应用。 首先,我们要理解Android应用的基础架构。Android应用主要由Activity、Service、...
- **`android:text`**: 设置按钮上显示的文字。 - 其他属性同 `TextView`。 **示例代码:** ```xml android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content...
CompoundDrawable是EditText的一个属性,可以设置四个边(左、上、右、下)的图标,这里用到了左侧的图标。 当用户开始输入文本时,这个自定义控件可能会改变左侧的图片,例如从一个提示性的图标(如“用户名”或...
Android的架构主要包括Linux内核、中间件、应用框架和应用程序四个部分。其中,Linux内核提供基本的系统服务,中间件提供了各种API和库,应用框架提供了UI和应用程序的框架,应用程序是用户可以安装和使用的应用软件...