开发者社区> 无名公子> 正文

Android 动态设置TextView的drawableLeft等属性

简介:
+关注继续查看

  首先,我们在开发过程中,会经常使用到android:drawableLeft="@drawable/ic_launcher"这些类似的属性:


  关于这些属性的意思,无非是在你的textView文本的上下左右处添加一个图片。比如下面这么一段代码:

<TextView
        android:id="@+id/text_drawable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:drawableLeft="@drawable/ic_launcher"
        android:drawablePadding="4dp"
         />

它设置了在文本的左边,显示一个小图标,效果如下:



  而在一些情况下,我们需要在动态在代码中设置文本周围的图标,那该如何呢,首先,我们看下TextView提供了哪些方法:

乍眼看去,挺多方法的,好,我们主要介绍setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds。

手工设置文本与图片相对位置时,常用到如下方法:

  setCompoundDrawables(left, top, right, bottom)及setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom),它们的意思是设置Drawable显示在text的左、上、右、下位置。

  但是两者有些区别:
  setCompoundDrawables 画的drawable的宽高是按drawable.setBound()设置的宽高,
所以才有The Drawables must already have had setBounds(Rect) called,即使用之前必须使用Drawable.setBounds设置Drawable的长宽。

  而setCompoundDrawablesWithIntrinsicBounds是画的drawable的宽高是按drawable固定的宽高,
所以才有The Drawables' bounds will be set to their intrinsic bounds.即通过getIntrinsicWidth()与getIntrinsicHeight()获得。

  一般,建议使用setCompoundDrawablesWithIntrinsicBounds,这样你即无需设置Drawables的bounds了。


 看下代码:

		TextView textDrawable = (TextView) findViewById(R.id.text_drawable);

		Drawable drawableLeft = getResources().getDrawable(
				R.drawable.ic_launcher);

		textDrawable.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,
				null, null, null);
		textDrawable.setCompoundDrawablePadding(4);

 效果和以上直接通过android:drawableLeft一样!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android 设置Padding和Margin(动态/静态)
在Android界面开发时,为了布局更加合理好看,很多时候会用上Padding和Margin, padding和margin是什么呢?即内边距和外边距; 某个View指定为padding是针对该View里面的子View距离该View距离而言的,或者是里面的内容距离容器的距离。
50 0
如何使用 Android Studio 设置 Genymotion 模拟器
这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
31 0
Android | 通过WindowInsetsController设置系统栏颜色、Behavior、显示隐藏等
两种方式可以引入`WindowInsetsController`,一种直接通过`API`的`val controller = window.decorView.windowInsetsController`获取,注意该方法在`API30`及以上才有
56 0
.NET MAUI 安卓 UI 资源设置
本文主要介绍使用 MAUI 开发安卓应用时,如何更换和处理 UI 资源:应用名称,图标,主题配色,状态栏,闪屏。
184 0
Android 7.1 设置-内存
Android 7.1 设置-内存
67 0
Android 7.1 设置添加一级目录设置项-2
Android 7.1 设置添加一级目录设置项-2
52 0
Android 7.1 设置-存储信息显示不正确
Android 7.1 设置-存储信息显示不正确
87 0
Android 7.1设置默认Launcher重启后失效(需手动选择)
Android 7.1设置默认Launcher重启后失效(需手动选择)
136 0
Android 7.1 设置不支持遥控操作?
Android 7.1 设置不支持遥控操作?
114 0
Android 7.1 设置添加一级目录设置项
Android 7.1 设置添加一级目录设置项
100 0
Android 8.1 设置中首选网络类型缺少LTE
Android 8.1 设置中首选网络类型缺少LTE
93 0
android 7.1 缺少设置directBootAware导致无法启动指定Launcher
android 7.1 缺少设置directBootAware导致无法启动指定Launcher
113 0
android 检测外接键盘并设置输入法布局
android 检测外接键盘并设置输入法布局
104 0
Android 指定TextView某个 字/段 颜色,可批量设置
Android 指定TextView某个 字/段 颜色,可批量设置
73 0
Android 设置图片的四个角 为圆角
Android 设置图片的四个角 为圆角
72 0
+关注
无名公子
文章
问答
视频
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像