Android开发 从代码里设置Drawable图片不显示的问题
问题描述
我们从代码里获得Drawable在设置给View时会发现,图片不显示的问题.比如如下代码:
Drawable drawable = getResources().getDrawable(R.drawable.bg_btn_green, null);
btn1.setCompoundDrawables(null, drawable, null, null);//在按键的上部分显示图片
问题原因
用上面的方式代码里获取的drawable其实未设置setBounds()尺寸大小
解决问题
给drawable设置setBounds()就行了,如下:
drawable.setBounds(0, 0, 100, 100);
但是,这样并没有解决适配尺寸问题,因为这是你自己设置的固定值.这里给出2个思路来适配尺寸
第一种.如果你的drawable的xml文件是一个矢量图(矢量图通常有包含宽和高)或者包含内部尺寸,比如如下背景xml有提供android:width="100dp"和android:height="100dp":
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorGreen4" />
<corners android:radius="5dp"/>
<size android:width="100dp"
android:height="100dp"/>
</shape>
那么你就可以选择以下方式适配尺寸:
Drawable drawable = getResources().getDrawable(R.drawable.bg_btn_green, null);
// drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
btn1.setCompoundDrawables(null, drawable, null, null);//给按键的上部分设置一张背景图片
drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight() 获取内部宽度与高度
drawable.getMinimumWidth(), drawable.getMinimumHeight() 获取推荐的最小宽度和高度
第二种.没有内部尺寸的drawable
没有内部尺寸的drawable一般是一个按键背景或者一个聊天背景框,再或者是一个分割线.这个时候我们只需要适配View的尺寸就行了.如下代码:
btn1.post(new Runnable() { //因为View在onCreate的生命周期里被创建的时候是没有测量尺寸的,所以我们需要将Drawable的处理放到View的列队中
@Override
public void run() {
Drawable drawable = getResources().getDrawable(R.drawable.bg_btn_green, null);
int width = 0;
int height = 0;
if (drawable.getIntrinsicWidth() == -1){ //如果是返回-1就说明没有宽度值
width = btn1.getWidth();//获取View的宽度
}else {
width = drawable.getIntrinsicWidth();
}
if (drawable.getIntrinsicHeight() == -1){
height = btn1.getHeight();
}else {
height = drawable.getIntrinsicHeight();
}
drawable.setBounds(0, 0, width, height);
btn1.setBackground(drawable);//设置为背景
}
});
如果使用drawable.getMinimumWidth(), drawable.getMinimumHeight() 则判断的值要变成 0. 因为,这2个方法在注释里也说明了如果没有推荐的最小值就会返回0
Android开发 从代码里设置Drawable图片不显示的问题的更多相关文章
- (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
- Android开发之常用必备工具类图片bitmap转成字符串string与String字符串转换为bitmap图片格式
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
- Android开发中Eclipse里的智能提示设置
今天开始学习一下Android开发,直接在Android Developers下载的一个开发工具包,然后再下了一个JDK,配置完环境变量等一系列的工作后环境就搭建好了,在新建好第一个Android项目 ...
- Android代码中设置背景图片
//设置背景图片 String picfile= Environment.getExternalStorageDirectory() + "/pdp/pdp.png" ...
- Android EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离
有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图: 这里想设置的就是之前的手机icon和”请输入手机号“之间的距离,则可是使用以下的方式: &l ...
- Android在java代码中设置margin
我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...
- Android开发之使用GridView+仿微信图片上传功能(附源代码)
前言:如果转载文章请声明转载自:https://i.cnblogs.com/EditPosts.aspx?postid=7419021 .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...
随机推荐
- NX二次开发-获取按钮的ID UF_MB_ask_button_id
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- (转)OC学习笔记 @property的属性 strong 和 weak 理解
在ObjectiveC里,用@property访问所有的实例变量.@property有一对属性:strong 和 weak.官方文档里的解释晦涩难懂:Stack Overflow里的用户RDC (ht ...
- 杂项:CSS3
ylbtech-杂项:CSS3 1.返回顶部 1. CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型.列表模块. ...
- JS-copy到剪贴板
因为 clipboard.js 兼容性受限
- 数据库和java Bean
·1. 数据库和java Bean,字段类型要一致.不一致查询不出来,但不会报错. 字段名称也一样,不一致查询不出来,但不会报错. 2. 数据库和java Bean字段的个数可以不一样,也不会包错 3 ...
- ubuntu 删除 mysql (转)
1 sudo apt-get autoremove --purge mysql-server-5.0 2 sudo apt-get remove mysql-server 3 sudo apt-get ...
- WriteFile
从R3 ,到磁盘 1:kernel32 WriteFile 1) 挺惊讶的,符号好使了, 前面大概4条判断,根据句柄判断要写到什么地方,一共有4个地方可能要去, stdin stdout s ...
- jmeter在windows环境下系统参数设置
在windows环境下搭建jmeter的压测实验环境,需要对操作系统默认的一些个参数进行设置,以提高并发能力.特别是作为压力机的时候. Socket 编程时,单机最多可以建立多少个 TCP 连接,受到 ...
- dubbo重连机制会不会造成错误
dubbo在调用服务不成功时,默认会重试2次. Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机器也能一定程度的保证服务的质量. 但是如果不合理的配置重试 ...
- thinkphp 模版引擎
系统支持原生的PHP模板,而且本身内置了一个基于XML的高效的编译型模板引擎,系统默认使用的模板引擎是内置模板引擎,关于这个模板引擎的标签详细使用可以参考模版引擎部分. 内置的大理石平台检定规程模板引 ...