Android中TextView实现富文本展示效果
来源:互联网 发布:blct升级数据 编辑:程序博客网 时间:2024/05/21 15:38
在项目中遇到这样一个问题,所有的内容都是html标签进行来写的,里面还有图片展示。于是,我在百度上一通问度娘,可是百度中展示的富文本内容,没有一个适合我的。都存在问题,经过一番搜索,最后进行解决了。
本文主要用来就是通过TextView来进行展示内容、图片。实现TextView加载富文本功能,废话我就不做过多的说,直接上代码。
代码如下:
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.graphics.drawable.LevelListDrawable;import android.os.AsyncTask;import android.text.Html;import android.util.Log;import android.widget.TextView;import com.wekair.app.R;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;/** * File Name:HtmlImageGetter * Author:jinghui liu * Created Time:2017/12/13 16:58 */public class HtmlImageGetter implements Html.ImageGetter{ private Context context; private final int widthPixels; private TextView textView; public HtmlImageGetter(Context context, TextView textView){ this.context = context; this.textView = textView; widthPixels = context.getResources().getDisplayMetrics().widthPixels; } /** * 获取图片 */ @Override public Drawable getDrawable(String source) { LevelListDrawable d = new LevelListDrawable(); Drawable empty = context.getResources().getDrawable( R.mipmap.img_default); d.addLevel(0, 0, empty); d.setBounds(0, 0,widthPixels, empty.getIntrinsicHeight()); new LoadImage().execute(source, d); return d; } /** * 异步下载图片类 * * @author Ruffian * @date 2016年1月15日 * */ class LoadImage extends AsyncTask<Object, Void, Bitmap> { private LevelListDrawable mDrawable; @Override protected Bitmap doInBackground(Object... params) { String source = (String) params[0]; mDrawable = (LevelListDrawable) params[1]; //特殊处理,进行来处理https协议进行来显示的图片 X509TrustManager xtm = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) { } @Override public X509Certificate[] getAcceptedIssuers() { X509Certificate[] x509Certificates = new X509Certificate[0]; return x509Certificates; } }; SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }; try { URL url = new URL(source); HttpsURLConnection httpsURLConnection= (HttpsURLConnection) url.openConnection(); httpsURLConnection.setHostnameVerifier(DO_NOT_VERIFY); httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory()); InputStream is = httpsURLConnection.getInputStream(); return BitmapFactory.decodeStream(is); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 图片下载完成后执行 */ @Override protected void onPostExecute(Bitmap bitmap) { if (bitmap != null) { try{ BitmapDrawable d = new BitmapDrawable(bitmap); mDrawable.addLevel(1, 1, d); /** * 适配图片大小 <br/> * 默认大小:bitmap.getWidth(), bitmap.getHeight()<br/> * 适配屏幕:getDrawableAdapter */ mDrawable = getDrawableAdapter(context, mDrawable, bitmap.getWidth(), bitmap.getHeight()); // mDrawable.setBounds(0, 0, bitmap.getWidth(), // bitmap.getHeight()); mDrawable.setLevel(1); /** * 图片下载完成之后重新赋值textView<br/> * mtvActNewsContent:我项目中使用的textView * */ textView.invalidate(); CharSequence t = textView.getText(); textView.setText(t); }catch (Exception e){ Log.e("onPostExecute", "onPostExecute: "+e.toString() ); } } } /** * 加载网络图片,适配大小 * * @param context * @param drawable * @param oldWidth * @param oldHeight * @return * @author Ruffian * @date 2016年1月15日 */ public LevelListDrawable getDrawableAdapter(Context context, LevelListDrawable drawable, int oldWidth, int oldHeight) { LevelListDrawable newDrawable = drawable; long newHeight = 0;// 未知数 newHeight = (widthPixels * oldHeight) / oldWidth; // LogUtils.w("oldWidth:" + oldWidth + "oldHeight:" + // oldHeight); // LogUtils.w("newHeight:" + newHeight + "newWidth:" + // newWidth); newDrawable.setBounds(0, 0, widthPixels, (int) newHeight); return newDrawable; } }}
进行使用:
courseIntroduction.setText(Html.fromHtml(s,new HtmlImageGetter(mContext,courseIntroduction), null));
为了让大家看见,我在下面贴一下效果图:
阅读全文
0 0
- Android中TextView实现富文本展示效果
- 原生TextView实现富文本展示
- Android Spanned实现TextView富文本效果(1)--文字
- Android Spanned实现TextView富文本效果(2)--表情
- Android中TextView富文本
- Android TextView 富文本加载实现
- Android 中textview显示富文本信息
- 关于android中TextView的富文本
- Android中TextView的富文本显示
- Android TextView富文本
- android textview富文本
- Android TextView富文本、超链接和添加文字背景等其他效果的实现
- Android(Java):在textview中显示富文本
- 用TextView实现富文本展示,点击断句和语音播报
- android中textview文本滚动效果
- TextView等类似控件的富文本展示
- Textview富文本的其它实现方式
- TextView 实现富文本 可以点击
- PHP入门-运算符与操作符
- 1079. 延迟的回文数 (20)
- Android实现掌盟战绩图(矩形进度条)
- 解决Redis服务错误一例听语音
- lintcode 3:统计数字
- Android中TextView实现富文本展示效果
- java
- 理解node中的require和exports
- coursera Machine Learning 第六周 测验quiz2答案解析 Machine Learning System Design
- 快速幂取模
- java大数据
- PHP入门-变量声明与使用
- 新老系统迁移及整合方案
- 数据结构之归并排序(java)