问题描述

  我们从代码里获得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图片不显示的问题的更多相关文章

  1. (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

    android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...

  2. 36个Android开发常用代码片段

    //36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...

  3. Android开发之常用必备工具类图片bitmap转成字符串string与String字符串转换为bitmap图片格式

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  4. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

  5. Android开发中Eclipse里的智能提示设置

    今天开始学习一下Android开发,直接在Android Developers下载的一个开发工具包,然后再下了一个JDK,配置完环境变量等一系列的工作后环境就搭建好了,在新建好第一个Android项目 ...

  6. Android代码中设置背景图片

    //设置背景图片        String picfile= Environment.getExternalStorageDirectory() + "/pdp/pdp.png" ...

  7. Android EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离

    有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图: 这里想设置的就是之前的手机icon和”请输入手机号“之间的距离,则可是使用以下的方式: &l ...

  8. Android在java代码中设置margin

    我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...

  9. Android开发之使用GridView+仿微信图片上传功能(附源代码)

    前言:如果转载文章请声明转载自:https://i.cnblogs.com/EditPosts.aspx?postid=7419021  .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...

随机推荐

  1. Openstack Paste.ini 文件详解

    目录 目录 pasteini 配置文件详解 composite pipeline filter app DEFAULT server Request 被 pasteini 处理的流程 如何加载 pas ...

  2. Jeecg 容器初始化监听器

    文件位置: F:\jeecg-bpm-3.8\jeecg-bpm-3.8-master\jeecg-bpm-3.8\src\main\java\org\jeecgframework\web\syste ...

  3. AtCoder ABC 132F Small Products

    题目链接:https://atcoder.jp/contests/abc132/tasks/abc132_f 题目大意 分析 代码如下

  4. java中的反射机制和javaBean

    反射 反射:就是通过一个类加载进方法区时加载到栈内存中的Class字节码文件对这个类进行解剖 通过反射可以获取到一个类的构造方法,成员方法,成员变量 反射将一个类的各个部分映射成相应的类 反射获取构造 ...

  5. hbase 集群搭建(公司内部测试集群)

    我用的是cdh4.5版本:配置文件:$HBASE_HOME/conf/hbase-env.shexport JAVA_HOME=$JAVA_HOMEexport JAVA_HOME=/home/had ...

  6. 使用python和tushare股票交易日历数据,判断节假日周末休市

    接口:trade_cal 描述:获取各大交易所交易日历数据,默认提取的是上交所 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称       |       类型        ...

  7. USACO2006 Backward Digit Sums /// 全排列 oj24212

    题目大意: 给出杨辉三角的顶点值M和底边数的个数 N (1 ≤ N ≤ 10) ,求出底边各个数的值,其中各个数范围都为1 ~ N 当N=4,M=16时可能是这样的   3   1   2   4  ...

  8. java 一维数组的输出方式

    1.使用传统的for()循环输出: //定义一个数组 int []array = {1,2,3,4,5}; for(int i=0;i<array.length;i++) { System.ou ...

  9. 【学术篇】SPOJ QTREE 树链剖分

    发现链剖这东西好久不写想一遍写对是有难度的.. 果然是熟能生巧吧.. WC的dalao们都回来了 然后就用WC的毒瘤题荼毒了我们一波, 本来想打个T1 44分暴力 然后好像是特判写挂了还是怎么的就只能 ...

  10. Android开发 SeekBar开发记录

    前言 开发记录博客不是讲解使用博客,更多的是各种功能与点子的记录 基本使用 <SeekBar android:layout_width="match_parent" andr ...