Android textview 文字中间加上图片

### 实现TextView文字中间显示图片 为了实现在`TextView`中的文字中间插入图片的效果,可以采用多种方法。一种常见的方式是利用`Html.fromHtml()`配合自定义的`ImageGetter`接口来加载并展示图片[^1]。 下面是一个具体的例子: ```java public class MainActivity extends AppCompatActivity { private static final String HTML_TEXT_WITH_IMAGE = "<html><body>这是前半部分文本<img src='https://example.com/image.png' />这是后半部分文本</body></html>"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.textView); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { textView.setText(Html.fromHtml(HTML_TEXT_WITH_IMAGE, Html.FROM_HTML_MODE_COMPACT, null /* TagHandler */, new Html.ImageGetter() { public Drawable getDrawable(String source) { LevelListDrawable drawable = new LevelListDrawable(); try { InputStream inputStream; URL url = new URL(source); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); inputStream = connection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Drawable d = new BitmapDrawable(getResources(), bitmap); int width = Math.round(d.getIntrinsicWidth() * getResources().getDisplayMetrics().density); int height = Math.round(d.getIntrinsicHeight() * getResources().getDisplayMetrics().density); d.setBounds(0, 0, width , height ); drawable.addLevel(1, 1, d); drawable.setLevel(1); return drawable; } catch (IOException e) { Log.e("Error loading image", e.getMessage()); return null; } } })); } else { textView.setText(Html.fromHtml(HTML_TEXT_WITH_IMAGE)); } textView.setMovementMethod(new ScrollingMovementMethod()); // 允许TextView滚动 } } ``` 上述代码展示了如何通过网络获取图像资源,并将其嵌入到`TextView`内的HTML字符串中。对于本地资源文件,则可以直接使用资源ID替换URL地址[^2]。 另外,还可以调整`TextView`内部组件之间的间距以及图片尺寸,这可以通过设置属性如`android:drawablePadding`来控制图片与周围文本间的距离[^3];而对于更复杂的样式需求,比如改变特定位置字符的颜色,可借助于`SpannableString`类及其关联的对象,例如`ForegroundColorSpan`来进行定制化处理[^4]。 #### 注意事项 - 当应用的目标API版本较高时(>= N),应当使用带有模式参数的方法重载形式。 - 图片加载过程中可能出现异常情况,因此建议加入错误处理逻辑以提高程序健壮性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值