imagespanandroid
① 如何删除EditBox中的ImageSpan-Android开发问答
我这基桥型样搏猜可以删除。
final KeyEvent keyEventDown = new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DEL);
btnDel.setOnClickListener(new OnClickListener() {
@Override
public void
onClick(View v) {
/消毕/ TODO Auto-generated
method stub
editText.onKeyDown(KeyEvent.KEYCODE_DEL, keyEventDown);
}
});
② Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。
特此感谢 http://blog.csdn.net/instriously/article/details/53493392
特此感谢 https://github.com/pengyuntao/RadiusBackgroundSpan
全中文的:
中文加英文余誉拆竖枣虚握的
③ android编程如何显示大量文本
如果是产品制作方向——
由于手机屏幕的限制,和屏幕大小的问题
显示大量文字,在产品方面,我们一般放弃使用缩小字体类似的方法
一般的做法都是让文本可以上下滑动来进行阅读
如果按照上下滑动思路就很简单了
使用ScrollView,内部嵌套一个TextView就可以了
可以来个简单范例
============================
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="要显示的大段文字" />
</LinearLayout>
</ScrollView>
==========================
如果是说编程界面——
如果开发使用ADT可以
在首选项中选择常规——编辑器——文本编辑器,这里可以任意修改文字大小、颜色等
④ android 怎么实现图文混排 如图所示的效果
或者把图片放在层里也好任意移动图片的位置,只是可能有些IE对图层内容不能正常显示。 你给图片设个浮动,就可以图文混排,用css样式定义或用对齐方式
⑤ Android SpannableString用法
什么是SpannableString?
SpannableString,是CharSequence的一种,原本的CharSequence只是一串字符序列,没有任何样式,而SpannableString可以在字符序列基础上对指定的字符进行润饰,在开发中,TextView可以通过setText(CharSequence)传入SpannableString作为参数,来达到显示不同样式文字的效果。
创建方式
一般通过以下方式进行设置
这里讲解一大或下几个参数的意义
这里涉及到一个重要的角色,就是各种各样的span,它决定我们要对文字的进行怎样的润饰,而后三个参数决定润饰哪些文字,为了方便起见,后面的flags默认都使用SPAN_INCLUSIVE_EXCLUSIVE模式。
ForegroundColorSpan:前景色,也就是对文字上色,颜色设置为GREEN,start为4,end为7,应该是“陈奕迅”三个字显示为绿色,看一下实际效果
BackgroudColorSpan:与ForegroundColorSpan类似,对文字背景上色
ClickableSpan:是一个抽象类,实现可点击效果,可以重写onClick方法实现点击事件,这里点击“陈奕迅”三个字简单地弹toast
URLSpan:实现超链接的效果,继承于ClickableSpan,点击实现跳转到浏览器
MaskFilterSpan:构造方法接受MaskFilter作为参数,其中它有两个子类:EmbossMaskFilter和BlurMaskFilter
EmbossMaskFilter实现浮雕效果
BlurMaskFilter实现模糊效果
RelativeSizeSpan:设置氏罩字体的相对大小,这里设置为TextView大小的1.5倍,看图
AbsoluteSizeSpan:设置字体的相绝对大小,40表示文字大小,true表示单位为dip,若为false则表示px
ScaleXSpan:设置字体x轴缩放,1.5表示x轴放大为1.5倍,效果如图
StyleSpan:设置文字样式,如斜体、粗体
TypefaceSpan:设置文字字体类型,如monospace、serif和歼仿闹sans-serif等等
TextAppearanceSpan:设置文字外貌,通过style资源设置,这里使用系统的style资源
UnderlineSpan:设置文字下划线,强调突出文字时可以使用该span
StrikethroughSpan:设置文字删除线
SuperscriptSpan:设置文字为上标
SubscriptSpan:设置文字为下标
[图片上传中...(-5258c2-1637738519376-0)]
ImageSpan:设置图片
⑥ Android用ImageSpan显示的图片怎么调整大小
ImageSpan是通过bitmap生成的,如果要调整图片的大小,你可以对bitmap进行预处理,比如scale之类的操作,生成你目标的bitmap再生成ImageSpan。
还有就是,可以把图片设置到ImageView里,调整好ImageView里图片的大小,再把ImageView生成对应的bitmap,从而生成ImageSpan。
xml视图生成bitmap参照:
⑦ IM项目中的自定义小表情实现
在im项目(Android)中,用户发消息,喜欢在文字中嵌入一些小表情,以表达发送者当时的情感。除了系统输入法自带的emoji表咐尘情(emoji其实是特殊的文字)外。项目希望带一些更漂亮,带产品特色文化的自定义小表情(小图片)。
图片嵌入在文字中显示,很明显可以使用ImageSpan去弊含实现该效果。
效果如图:
实现上,主要问题是,实现文字与表情的转换。因此需要定义一套对应关系。
这里采用类似微信的实现,[key]对应表情。比如: [微笑] 对应 😊。
工具类:
主要就是做一个转换功能。同时需要考虑一下性能优化,否则效率低就会卡顿。
PS:这里优化了 查询转换策略 和 Drawable复用策略,供参考。
注 :Spannable有关的操作,少用String。使用CharSequence,因为不一定是String。用 SpannableString.valueOf(text) 代替 new SpannableString(text)
在TextView上使用,也写个BindingAdapter方法。
注:其中 TextUtils.ellipsize(emo, paint, avail, TextUtils.TruncateAt.END) 是为了解决表情在单行textView显示不下时显“...”.的问题。直接默认用TextView的 ellipsize 属性,对表情(ImageSpan)无效,租简笑会截成半个。
表情要在输入框中显示。根据输入code,自动转换成表情(ImageSpan)。
方案1:给EditView设置监听,在文字变化后将文字做个转换。这样效率超低,输入越多越卡。否决!
方案2:根据具体变化的文本设置转换。
注 :当前输入的东西(可能是复制过来的多个字符)。可能会影响到前面或后面的几个字符。
表情选择框操作 :
删除:模拟退格,表情需要整个整个删。
插入:将code插入到光标末尾。
转发到微信,有些表情微信里没有对应。转换成emoji代替。
要点:
⑧ android SpannableString图片显示不全
很简单,给EditText设置padding,或者上面遮住了就设置paddingTop,以此类推。
⑨ android的TextView怎么做高亮闪烁效果
要给TextView加上效果,方式主要有几种:第一种,自动应用效果,使用android:autolink属性,如:java代码android:id="@+id/text1"android:layout_width="match_parent"android:layout_height="match_parent"android:autoLink="all"android:text="@string/link_text_auto"/>第二种,在文本中使用标签,如:Java代码text2:Thisissomeothertext,withalinkspecifiedviaantag.Usea\"tel:\"URLtodialaphonenumber第三种,和第二种其实是一样的,只不过将文本改在JAVA代码中,如:Java代码TextViewt3=(TextView)findViewById(R.id.text3);t3.setText(Html.fromHtml("text3:Textwitha"+"link"+"."));t3.setMovementMethod(LinkMovementMethod.getInstance());第四种,前面三种可以说都是自动的,而第四种就是纯“手工”的了。通过创建SpanableString字符串,并在之上创建一个或多个Span来实现丰富的效果。例子如下:Java代码SpannableStringss=newSpannableString("text4:Clickheretodialthephone.");ss.setSpan(newStyleSpan(Typeface.BOLD),0,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);ss.setSpan(newURLSpan("tel:4155551212"),13,17,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);TextViewt4=(TextView)findViewById(R.id.text4);t4.setText(ss);t4.setMovementMethod(LinkMovementMethod.getInstance());完整的代码见ApiDemo吧,下面我提几点需要注意的:.setMovementMethod,此方法在需要响应用户事件时使用,如点击一个电话号码就跳转到拨号页面。如果不执行这个方法是不会响应事件的,即便文本看着已经是下划线蓝色字了。.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,这是在setSpan时需要指定的flag,它的意义我试了很久也没试出来,睡个觉,今天早上才突然有点想法,试之,果然。它是用来标识在Span范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)在Android中,TextView是我们最常用的用来显示文本的控件。一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下。res-layout-main.xml:Java代码android:layout_height="wrap_content"android:layout_width="wrap_content"android:orientation="horizontal">android:id="@+id/myTextView"android:layout_width="fill_parent"android:layout_height="wrap_content"/>res-color-color.xmlres-color-linkcolor.xml:Java代码android:color="#ffffff00"/>android:color="#ff00ffff"/>TextViewLinkActivity:Java代码importjava.io.IOException;importorg.xmlpull.v1.XmlPullParserException;importandroid.app.Activity;importandroid.content.res.ColorStateList;importandroid.content.res.XmlResourceParser;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Color;importandroid.graphics.drawable.Drawable;importandroid.os.Bundle;importandroid.text.SpannableString;importandroid.text.Spanned;importandroid.text.method.LinkMovementMethod;importandroid.text.style.AbsoluteSizeSpan;importandroid.text.style.BackgroundColorSpan;importandroid.text.style.BulletSpan;importandroid.text.style.DrawableMarginSpan;importandroid.text.style.ForegroundColorSpan;importandroid.text.style.IconMarginSpan;importandroid.text.style.ImageSpan;importandroid.text.style.RelativeSizeSpan;importandroid.text.style.ScaleXSpan;importandroid.text.style.StrikethroughSpan;importandroid.text.style.StyleSpan;importandroid.text.style.SubscriptSpan;importandroid.text.style.SuperscriptSpan;importandroid.text.style.TextAppearanceSpan;importandroid.text.style.TypefaceSpan;importandroid.text.style.URLSpan;importandroid.text.style.UnderlineSpan;importandroid.widget.TextView;{TextViewmTextView=null;SpannableStringmsp=null;/**.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mTextView=(TextView)findViewById(R.id.myTextView);//创建一个SpannableString对象msp=newSpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");//设置字体(default,default-bold,monospace,serif,sans-serif)msp.setSpan(newTypefaceSpan("monospace"),0,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(newTypefaceSpan("serif"),2,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置字体大小(绝对值,单位:像素)msp.setSpan(newAbsoluteSizeSpan(20),4,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(newAbsoluteSizeSpan(20,true),6,8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//第二个参数booleandip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。//设置字体大小(相对值,单位:像素)参数表示为默认字体大小的多少倍msp.setSpan(newRelativeSizeSpan(0.5f),8,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//0.5f表示默认字体大小的一半msp.setSpan(newRelativeSizeSpan(2.0f),10,12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//2.0f表示默认字体大小的两倍//设置字体前景色msp.setSpan(newForegroundColorSpan(Color.MAGENTA),12,15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置前景色为洋红色//设置字体背景色msp.setSpan(newBackgroundColorSpan(Color.CYAN),15,18,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置背景色为青色//设置字体样式正常,粗体,斜体,粗斜体msp.setSpan(newStyleSpan(android.graphics.Typeface.NORMAL),18,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//正常msp.setSpan(newStyleSpan(android.graphics.Typeface.BOLD),20,22,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//粗体msp.setSpan(newStyleSpan(android.graphics.Typeface.ITALIC),22,24,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//斜体msp.setSpan(newStyleSpan(android.graphics.Typeface.BOLD_ITALIC),24,27,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//粗斜体//设置下划线msp.setSpan(newUnderlineSpan(),27,30,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置删除线msp.setSpan(newStrikethroughSpan(),30,33,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置上下标msp.setSpan(newSubscriptSpan(),34,35,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//下标msp.setSpan(newSuperscriptSpan(),36,37,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//上标//超级链接(需要添加setMovementMethod方法附加响应)msp.setSpan(newURLSpan("tel:4155551212"),37,39,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//电话msp.setSpan(newURLSpan("mailto:[email protected]"),39,41,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//邮件msp.setSpan(newURLSpan(""),41,43,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//网络msp.setSpan(newURLSpan("sms:4155551212"),43,45,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//短信使用sms:或者smsto:msp.setSpan(newURLSpan("mms:4155551212"),45,47,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//彩信使用mms:或者mmsto:msp.setSpan(newURLSpan("geo:38.899533,-77.036476"),47,49,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//地图//设置字体大小(相对值,单位:像素)参数表示为默认字体宽度的多少倍msp.setSpan(newScaleXSpan(2.0f),49,51,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变//设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)ColorStateListcsllink=null;ColorStateListcsl=null;XmlResourceParserxppcolor=getResources().getXml(R.color.color);try{csl=ColorStateList.createFromXml(getResources(),xppcolor);}catch(XmlPullParserExceptione){//TODO:handleexceptione.printStackTrace();}catch(IOExceptione){//TODO:handleexceptione.printStackTrace();}XmlResourceParserxpplinkcolor=getResources().getXml(R.color.linkcolor);try{csllink=ColorStateList.createFromXml(getResources(),xpplinkcolor);}catch(XmlPullParserExceptione){//TODO:handleexceptione.printStackTrace();}catch(IOExceptione){//TODO:handleexceptione.printStackTrace();}msp.setSpan(newTextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC,30,csl,csllink),51,53,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置项目符号msp.setSpan(newBulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN),0,msp.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色//设置图片Drawabledrawable=getResources().getDrawable(R.drawable.icon);drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());msp.setSpan(newImageSpan(drawable),53,57,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);mTextView.setText(msp);mTextView.setMovementMethod(LinkMovementMethod.getInstance());}}
⑩ 开源的Android富文本编辑器
基于原生EditText+span实现的Android富文本编辑器
github地址: https://github.com/yuruiyin/RichEditor
该组件是基于原生EditText+span的方式实现的,旨在提供一个功能齐全且使用方便的Android富文本编辑器。主要支持了加粗斜体等行内样式、标题引用等段内样式以及插入图片视频甚至自定义View等。
Step 1. Add the JitPack repository in your root build.gradle at the end of repositories:
Step 2. Add the dependency in your app build.gradle:
说明:各个样式按钮的layout由调用方自行完橡歼成
说明:其中ivBold为加粗ImageView,由调用方在layout中粗察定义;R.mipmap.icon_bold_normal和R.mipmap.icon_bold_light是加粗按钮正常状态和点亮状态图片的资源id。
说明:插入自定义布局最终也是通过bitmap以ImageSpan的形式插入到编辑器中的。
再次附上github地址:梁凳冲 https://github.com/yuruiyin/RichEditor
欢迎star、fork、提issue~