- 浏览: 108358 次
- 性别:
- 来自: 贵州
最新评论
-
ldci3gandroid:
受用,3Q。
如果程序员没了手! -
love_you:
,很好的代码
android GPS获取地理信息(弥补Geocoder不足之处) -
li172219244:
大哥,我下载了,为啥包很多的错啊,android.conten ...
android静默安装应用程序 -
kaikai7918:
大神,求android.content.pm.IPackage ...
android静默安装应用程序 -
kaikai7918:
大神,求android.content.pm.IPackage ...
android静默安装应用程序
一、[Android实例]实现TextView里的文字有不同颜色
转eoe:http://www.eoeandroid.com/thread-4496-1-1.html
import android.text.Html;
TextView t3 = (TextView) findViewById(R.id.text3);
t3.setText(
Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=\"http://www.google.com\">link</a
> " +
"created in the Java source code using HTML."));
二、TextView显示html文件中的图片
转javaeye:http://da-en.javaeye.com/blog/712415
我们知道要让TextView解析和显示Html代码。可以使用
Spanned text = Html.fromHtml(source);
tv.setText(text);
来实现,这个用起来简单方便。
但是,怎样让TextView也显示Html中<image>节点的图像呢?
我们可以看到fromHtml还有另一个重构:
fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
实现一下ImageGetter就可以让图片显示了:
ImageGetter imgGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
drawable = Drawable.createFromPath(source); // Or fetch it from the URL
// Important
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
return drawable;
}
};
至于TagHandler,我们这里不需要使用,可以直接传null。
参考文档:
http://tech-droid.blogspot.com/2010/06/textview-with-html-content.html英语好的朋友就直接看英文文档吧。
三、Android---文字中插入表情
转载自: http://blog.163.com/spf9190@126/blog/static/50207531201091545954587/
这段时间在做一个短信项目,需要实现短信中插入表情的功能,本一位非常困难,经过一段时间的研究,发现还是比较簡単的,现在总结如下。
以短信输入框为例,短信的输入框是一个EditText,它的append方法不仅可以加入字符串,还可以添加HTML标记。 以下就是使用HTML标记添加表情的具体操作。
首先需要构建一个ImageGetter,作用是通过HTML标记获得对应在res目录下的图片:
ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
//根据id从资源文件中获取图片对象
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
};
然后就可以直接往EditText视图中添加
inputLable.append(Html.fromHtml("<img src='"+clickedImageId+"'/>", imageGetter, null));
其中 Html.fromHtml("<img src='"+clickedImageId+"'/>"就是HTML的图片标记,在Android中支持了部分HTML标记的使用(这方面我还在 继续研究),HTML标记必须被Html.fromHtml修饰。imageGetter即为之前创建的ImageGetter类型的对象。
很简单的几句代码就解决了问题,不仅在EditText中,在TextView中同样可以这样插入图片。
效果图:
以下代码摘录至android源码里面的MMS项目,其中的
package com.android.mms.ui 里的 MessageListItem.java
package com.android.mms.util 里的 SmileyParser.java
/***
*
* 此方法描述的是: 注意此方法在做表情转换的准备了
* @author:wujun@cqghong.com,ppwuyi@sohu.com
* @version: 2010-5-13 下午03:31:13
*/
private void bindCommonMessage(final MessageItem msgItem) {
if (mDownloadButton != null) {
mDownloadButton.setVisibility(View.GONE);
mDownloadingLabel.setVisibility(View.GONE);
}
// Since the message text should be concatenated with the sender's
// address(or name), I have to display it here instead of
// displaying it by the Presenter.
mBodyTextView.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
// Get and/or lazily set the formatted message from/on the
// MessageItem. Because the MessageItem instances come from a
// cache (currently of size ~50), the hit rate on avoiding the
// expensive formatMessage() call is very high.
CharSequence formattedMessage = msgItem.getCachedFormattedMessage();
if (formattedMessage == null) { //肯定为null应为msgItem.formattedMessage从诞生来就没被注意过一次
formattedMessage = formatMessage(msgItem.mContact, msgItem.mBody, //重点到了
msgItem.mSubject, msgItem.mTimestamp,
msgItem.mHighlight);
msgItem.setCachedFormattedMessage(formattedMessage);
}
mBodyTextView.setText(formattedMessage);
if (msgItem.isSms()) {
hideMmsViewIfNeeded();
} else {
Presenter presenter = PresenterFactory.getPresenter(
"MmsThumbnailPresenter", mContext,
this, msgItem.mSlideshow);
presenter.present();
if (msgItem.mAttachmentType != WorkingMessage.TEXT) {
inflateMmsView();
mMmsView.setVisibility(View.VISIBLE);
setOnClickListener(msgItem);
drawPlaybackButton(msgItem);
} else {
hideMmsViewIfNeeded();
}
}
drawLeftStatusIndicator(msgItem.mBoxId);
drawRightStatusIndicator(msgItem);
}
//------------------------------------------------------------------------------
/***
*
* 此方法描述的是: 开始转换了哦
* @author:wujun@cqghong.com,ppwuyi@sohu.com
* @version: 2010-5-13 下午03:32:52
*/
private CharSequence formatMessage(String contact, String body, String subject,
String timestamp, String highlight) {
CharSequence template =
mContext.getResources().getText(R.string.name_colon); //遇到鬼了
<主题:<xliff:g id="SUBJECT">%s</xliff:g>>"
SpannableStringBuilder buf = //把他当作StringBuffer只是它可以放的不是 String 而已他能放跟多类型的东西
new SpannableStringBuilder(TextUtils.replace(template,
new String[] { "%s" },
new CharSequence[] { contact })); //替换成联系人
boolean hasSubject = !TextUtils.isEmpty(subject); //主题
if (hasSubject) {
buf.append(mContext.getResources().getString(R.string.inline_subject,
subject)); //buff先在是 联系人 主题 XXXX eg wuyi <主题:dsadasdsa> 我爱我家
}
if (!TextUtils.isEmpty(body)) {
if (hasSubject) {
buf.append(" - "); //如果内容有主题有就+ " - " eg wuyi <主题:sdsadsadsa> -
}
SmileyParser parser = SmileyParser.getInstance(); //获得表情类了哦
buf.append(parser.addSmileySpans(body)); //追查 急切关注中
}
if (!TextUtils.isEmpty(timestamp)) {
buf.append("\n");
int startOffset = buf.length();
// put a one pixel high spacer line between the message and the time stamp as requested
// by the spec.
//把之间的信息和时间戳的要求间隔一个像素的高线
//由规范
buf.append("\n");
buf.setSpan(new AbsoluteSizeSpan(3), startOffset, buf.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
startOffset = buf.length();
buf.append(timestamp);
buf.setSpan(new AbsoluteSizeSpan(12), startOffset, buf.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// Make the timestamp text not as dark 改变某区域颜色 时间的地方为特殊颜色
int color = mContext.getResources().getColor(R.color.timestamp_color);
buf.setSpan(new ForegroundColorSpan(color), startOffset, buf.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (highlight != null) {
int highlightLen = highlight.length();
String s = buf.toString().toLowerCase();
int prev = 0;
while (true) {
int index = s.indexOf(highlight, prev);
if (index == -1) {
break;
}
buf.setSpan(new StyleSpan(Typeface.BOLD), index, index + highlightLen, 0);
prev = index + highlightLen;
}
}
return buf;
}
//------------------------------------------------------------
/**
* Adds ImageSpans to a CharSequence that replace textual emoticons such
* as
with a graphical version.
*
* @param text A CharSequence possibly containing emoticons
* @return A CharSequence annotated with ImageSpans covering any
* recognized emoticons.
* 添加ImageSpans一个CharSequence的表情符号代替文字等 *如用图形版本:-)。
* 核心是把表情字符替换成ImageSpans的对象
*/
public CharSequence addSmileySpans(CharSequence text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Matcher matcher = mPattern.matcher(text);
while (matcher.find()) {
int resId = mSmileyToRes.get(matcher.group());
//注意下面的一块有点不好理解哦但是是核心
builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return builder;
}
总结:
android 在将字符转化为表情图像其核心代码为
builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
原理过程是先匹配到表情字符然后通过new ImageSpan(上下文,表情地址)绘制出一个ImageView然后替换掉表情字符。
五、 Android TextView 支持的HTML标签
发表评论
-
特效的一些基本参数
2013-02-04 12:38 1143角度和弧度 今天写程序遇到圆的参数方程,什么角度和弧度 ... -
Android Camera使用Matrix进行滑动特效变换
2013-01-19 13:05 6497以下所自行找到资料,如有抄作请尽量 Android 使用 ... -
java
2012-09-13 13:28 4由于本人发觉很多群的人很少、技术问题不够及时回答、本人现创建群 ... -
android添加桌面快捷方式
2012-07-30 15:19 1171封装类、直接放到项目中去就可以用 记在主配置文件添加权限 ... -
屏蔽launcher桌面应用
2012-07-30 14:14 3391今天接到一个需求、需求如下、 默认开机以后屏蔽所有界面,待机 ... -
android GPS获取地理信息(弥补Geocoder不足之处)
2012-07-19 15:57 7538最近做一个社交软件、需要用到GPS、但是过程中有反向编码、也 ... -
android Launcher——拖放功能深入研究
2012-05-23 11:22 3432Luancher有一个相对比较 ... -
(转)MeasureSpec
2012-05-12 12:54 975android的布局分两个阶段,先measure()后re ... -
android上一些方法的区别和用法的注意事项
2012-05-09 16:59 960onMeasure()和onLayout() 1. onMea ... -
android:修改preference中view属性
2012-05-09 12:54 1007android开发包preference提供了我们一些方面的设 ... -
android动画之最总总结
2012-04-19 19:59 1183动画总结:不管什么动画、透明还是大小、位置、四个动画可以改变的 ... -
如何在Ubuntu编译Android2.3源代码以及制作自己的SDK
2012-04-17 17:40 2297经过2两周断续的搜索网上编译的东西、得到了有用的编译之道 ... -
Android 怎么样改变图片颜色
2012-03-20 22:50 6536先说一下调色的一些基 ... -
android静默安装应用程序
2012-03-15 15:51 5787SharedPreferences fr = getShare ... -
Android 4.0源码下载
2012-02-23 09:23 1462经过3.0+ 版本不开源,终于等到4.0的开源,也可以看看4. ... -
十四个Uri
2012-01-03 20:52 1186Android 常用到的Intent的URI用法 以下是 ... -
EditText操作
2011-12-26 20:26 2232Android开发:自由选择TextView的文字 20 ... -
Ubuntu 将adb加入环境变量 及adb shell 无法启动
2011-11-22 19:40 4374客分类: Android开发 android ubuntu.在 ...
相关推荐
**TextView 深度解析与应用实践** 在 Android 开发中,TextView 是最基础且重要的控件之一,它用于展示文本信息,支持多种格式和样式。这篇博客将深入探讨 TextView 的内部工作原理、常见功能以及如何通过源码理解...
TextView 加边框知识点总结 一、 TextView 加边框...七、 小结 本文介绍了 TextView 加边框的两种方法,并详细解释了每种方法的实现过程。使用背景图片和 XML 文件可以实现各种样式的边框,提高用户体验和美观性。
在Android开发中,TextView是应用界面中最常用的组件之一,用于展示单行或多行文本。它在用户界面设计中扮演着至关重要的角色,因为大部分应用程序都需要用到文本展示。本篇文章将详细总结Android开发中TextView的...
在Android开发中,TextView是用于显示文本的基本组件。设置TextView的字体颜色是常见的需求,尤其在界面设计中,颜色搭配能极大地影响用户体验。本篇文章将详细介绍如何在Android中设置TextView的字体颜色,包括两种...
在Android编程中,设置TextView字体颜色是一项基本的任务,对于界面的视觉效果和信息传递至关重要。本文将详细讲解如何在Android中实现TextView字体颜色的设置,包括两种主要方法:通过XML配置文件和在Activity中...
本文实例总结了Android TextView高级显示技巧。分享给大家供大家参考,具体如下: 1. 自定义字体 可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而Android的 Typeface又使用TTF字体文件来设置字体 ...
TextView timestamp = findViewById(R.id.timestamp_show); timestamp.setText("timestamp:" + System.currentTimeMillis()); ``` 接下来是使用`java.util.Date`类获取当前日期和时间。这个类提供了丰富的日期和...
网上有好多种方法可实现,也比较零散, 此处做个小结,希望有所帮助。 1、通过继承EditText,自定义TextView public class NewTextView extends EditText { public NewTextView(Context context
- **监听回车键**:通过实现`textView:shouldChangeTextInRange:replacementText:`代理方法,检查是否按下回车键(`\n`),如果是,则调用`resignFirstResponder`退出键盘。 - **自定义视图**:可以创建一个`...
目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结
第1章 androi简介 1.1 初识android 1.1.1 历史背景 1.1.2 android特性 1.1.3 android组件结构 1.1.4 android应用程序框架 1.1.5 android的竞争优势 1.1.6 android模拟器 1.2 搭建android开发环境 ...8.13 小结
在`activity_splashscreen.xml`中添加一个TextView用于显示倒计时,例如`tv_countDown`。在`SplashScreenActivity.java`中,使用`CountDownTimer`类创建倒计时,每当倒计时结束时启动主界面。倒计时的开始时间和间隔...
1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...
1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...
1.4 小结 11 第2章 OPhone开发环境和流程 12 2.1 安装Eclipse和ODT 12 2.1.1 安装Java SDK 12 2.1.2 安装Eclipse 13 2.1.3 安装OPhone SDK 13 2.1.4 安装和配置ODT插件 14 2.2 第一个OPhone应用程序 16 2.2.1 新建...