Android(安卓)动态图文混排的常用方法
16lz
2021-01-26
DrawableIcon的设置
对于TextView或者EditText动态设置drawableLeft,drawableRight,drawableTop,drawableBottom,drawableStart,drawableEnd的方法总结
Android中提供了许多动态设置的方法
但是用中容易造成的问题是,我们往往只调用了如上的一些方法,但并没有将Drawable的Bounds设置为特定的数据,导致这些图片无法显示,因此,做如下操作即可
设置右方向上的图片
Drawabledrawable=getResources().getDrawable(R.drawable.hotel_search);drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());selectCityTv.setCompoundDrawables(null,null,drawable,null);
或者我们可以使用另外一些方法
selectCityTv.setCompoundDrawablesWithIntrinsicBounds(Drawableleft,Drawabletop,Drawableright,Drawablebottom)
-------这里就不再试验了------------------------------
TextPaint+Html实现TextView图文混排
一.使用SpannableString
二.使用 TextPaint
一.使用SpannableString
实现URL的自动匹配:
URLSpan可以自行匹配,Image需要使用到Html,这基本解决了80%的开发需求
TextViewtv=(TextView)findViewById(R.id.myTextView);tv.setMovementMethod(LinkMovementMethod.getInstance());StringhtmlSource="<ahref='http://m.baidu.com'>百度</a>"+"<br/>图1<br/><imgsrc='ic_hua1'/>"+"<br/>图2<br/><imgsrc='ic_hua2'/>"+"<br/>图3<br/><imgsrc='ic_hua3'/>"+"<br/>图4<br/><imgsrc='ic_hua4'/>"+"<br/><ahref='http://m.sina.com.cn'>新浪</a>"+"<br/>联系电话:<ahref='tel:130888954276'>130888954276</a>";resources=getResources();CharSequencecharSequence=Html.fromHtml(htmlSource,newHtml.ImageGetter(){@OverridepublicDrawablegetDrawable(Stringsource){intidentifier=resources.getIdentifier(source,"drawable",getPackageName());Log.e("identifier","identifier="+identifier);Drawabledrawable=resources.getDrawable(identifier);drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());returndrawable;}},null);SpannableStringspanStr=newSpannableString(charSequence);URLSpan[]urlspans=spanStr.getSpans(0,spanStr.length(),URLSpan.class);for(URLSpanurlspan:urlspans){Log.d("url","url="+urlspan.getURL());spanStr.setSpan(newURLSpan(urlspan.getURL()){@OverridepublicvoidupdateDrawState(TextPaintds){super.updateDrawState(ds);//设置删除线ds.setFlags(TextPaint.STRIKE_THRU_TEXT_FLAG);//设置下划线ds.setUnderlineText(true);//设置颜色ds.setColor(0xfff90202);}@OverridepublicvoidonClick(Viewwidget){Log.e("widget","url="+getURL());try{URIuri=newURI(getURL());if("http".equalsIgnoreCase(uri.getScheme())||"https".equalsIgnoreCase(uri.getScheme())){//网络请求}elseif("tel".equalsIgnoreCase(uri.getScheme())){//电话}elseif("mailto".equalsIgnoreCase(uri.getScheme())){//邮箱}elseif("page".equalsIgnoreCase(uri.getScheme())){//Activity跳转}}catch(URISyntaxExceptione){e.printStackTrace();}}},spanStr.getSpanStart(urlspan),spanStr.getSpanEnd(urlspan),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}tv.setText(spanStr);
类似QQ的气泡上的图片,不一定是表情图片,因此,这里我们需要实现异步加载图片的方案,具体实现使用ImageLoader即可
二.使用 TextPaint
TextPaint属于原始的绘制工具TextPainttp=textView.getPaint();我们通过设置画壁来实现图文混排tp.setXXX
try doing it
更多相关文章
- Android工程报错常见解决方法
- Android开发:Activity之间的跳转及销毁Activity的方式
- 【Android】解决FloatMath类中方法在API 23以后不存在问题
- Android(安卓)手机 Google Play 商店“从服务器检索信息时出错 [
- Android(安卓)系统的Zygote初始化过程
- 记录Activity的onCreate()方法的参数PersistableBundle
- Jetpack组件之Lifecycle用途及原理
- Android(安卓)Widget点击事件
- Android自带倒计时控件Chronometer使用方法详解