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 .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...
随机推荐
- 使用Socket.IO做单页SPA应用更新
单页应用的挑战之一是确保客户端软件和服务器应用相匹配. 举例:如果一个用Bobbie在他的浏览器中加载我们的单页应用,五分钟之后我们更新了服务器应用.现在Bobbiede遇到了问题,因为我们对服务器做 ...
- (转)Java安全通信:HTTPS与SSL
转:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html 1. HTTPS概念 1)简介 HTTPS(全称:Hyperte ...
- idea 社区版+spring boot+ssm+swagger创建rest api
新手上路,出了好多错,记录一下 1.创建数据库:springBootSsmTest 2.打开IDEA创建 Spring boot项目:File——New——Project——Spring Assist ...
- (转)HashMap和HashSet的区别
HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的问题不涉及到HashSet和H ...
- HTML和CSS标签命名规则
1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存放所有临时图片和其它文件: ...
- python 在机器学习中应用函数
浅述python中argsort()函数的用法 (1).先定义一个array数据 1 import numpy as np 2 x=np.array([1,4,3,-1,6,9]) (2).现在我们可 ...
- WinDbg神断点
https://blogs.msdn.microsoft.com/alejacma/2007/10/31/cryptoapi-tracer-script/ 我得多少年才能学会这种写法.
- 我写的第一个DELPHI的控制台程序,留作纪念。
program Project2; {$APPTYPE CONSOLE} uses SysUtils; const s = 'hello' ; var a , b , c : integer; f ...
- "_CMTimeGetSeconds", referenced from:
CMTime is defined in the CoreMedia.framework. Add that framework to your project.
- PHP-SQL查询上升的温度
给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id. +---------+------------------+------------- ...