對於TextView或者EditText動態設置drawableLeft,drawableRight,drawableTop,drawableBottom,drawableStart,drawableEnd的方法總結html
Android中提供了許多動態設置的方法android
可是用中容易形成的問題是,咱們每每只調用瞭如上的一些方法,但並無將Drawable的Bounds設置爲特定的數據,致使這些圖片沒法顯示,所以,作以下操做便可網絡
設置右方向上的圖片異步
Drawable drawable = getResources().getDrawable(R.drawable.hotel_search); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); selectCityTv.setCompoundDrawables(null, null, drawable, null);
或者咱們可使用另一些方法ide
selectCityTv.setCompoundDrawablesWithIntrinsicBounds( Drawable left, Drawable top,Drawable right,Drawable bottom)
實現URL的自動匹配:spa
URLSpan能夠自行匹配,Image須要使用到Html,這基本解決了80%的開發需求.net
TextView tv = (TextView) findViewById(R.id.myTextView); tv.setMovementMethod(LinkMovementMethod.getInstance()); String htmlSource = "<a href='http://m.baidu.com'>百度</a>" + "<br/>圖1<br/><img src='ic_hua1'/>" + "<br/>圖2<br/><img src='ic_hua2'/>" + "<br/>圖3<br/><img src='ic_hua3'/>" + "<br/>圖4<br/><img src='ic_hua4'/>" + "<br/><a href='http://m.sina.com.cn'>新浪</a>"+ "<br/>聯繫電話:<a href='tel:130888954276'>130888954276</a>"; resources = getResources(); CharSequence charSequence = Html.fromHtml(htmlSource,new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { int identifier = resources.getIdentifier(source, "drawable", getPackageName()); Log.e("identifier", "identifier="+identifier); Drawable drawable = resources.getDrawable(identifier); drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); return drawable; } },null); SpannableString spanStr = new SpannableString(charSequence); URLSpan[] urlspans = spanStr.getSpans(0, spanStr.length(), URLSpan.class); for (URLSpan urlspan : urlspans) { Log.d("url", "url="+urlspan.getURL()); spanStr.setSpan(new URLSpan(urlspan.getURL()){ @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); //設置刪除線 ds.setFlags(TextPaint.STRIKE_THRU_TEXT_FLAG); //設置下劃線 ds.setUnderlineText(true); //設置顏色 ds.setColor(0xfff90202); } @Override public void onClick(View widget) { Log.e("widget", "url="+getURL()); try { URI uri = new URI(getURL()); if("http".equalsIgnoreCase(uri.getScheme()) || "https".equalsIgnoreCase(uri.getScheme())) { //網絡請求 }else if("tel".equalsIgnoreCase(uri.getScheme())){ //電話 } else if("mailto".equalsIgnoreCase(uri.getScheme())) { //郵箱 }else if("page".equalsIgnoreCase(uri.getScheme())){ //Activity 跳轉 } } catch (URISyntaxException e) { e.printStackTrace(); } } }, spanStr.getSpanStart(urlspan), spanStr.getSpanEnd(urlspan), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } tv.setText(spanStr);
相似QQ的氣泡上的圖片,不必定是表情圖片,所以,這裏咱們須要實現異步加載圖片的方案,具體實現使用ImageLoader便可
TextPaint 屬於原始的繪製工具 TextPaint tp = textView.getPaint(); 咱們經過設置畫壁來實現圖文混排 tp.setXXX
點擊時容易出現默認背景色,可是沒法經過setBgColor來修改
結局這種淡綠色高亮的方法以下
((TextView)view).setHighlightColor(getResources().getColor(android.R.color.transparent));
try doing it