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二次开发-UFUN所有对象类型的宏定义
/**************************************************************************** Copyright (c) 2010 Sie ...
- NXOpenC#_Training_1(cn)【转载】
- csp-s模拟测试94
csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...
- NAT穿透解决方案介绍(转)--Java ICE实现
转:http://www.cnblogs.com/javaminer/p/3575282.html 最近公司要实现在各种网络环境下面的多屏互动(机顶盒.android phone.iphone及PC端 ...
- opencv-图像形态学之膨胀腐蚀
转自:https://blog.csdn.net/poem_qianmo/article/details/23710721 一.原理 1.1 形态学概述 形态学(morphology)一词通常表示生物 ...
- iOS报错锦集
1.Your session has expired. Please log in. 提示“Your session has expired. Please log in.” 解决办法: Xcode ...
- 3. Image Structure and Generation
名词 Extensible Linking Format(ELF) 3.1 The structure of an ARM ELF image ARM ELF映像包含sections, regions ...
- Function(高阶函数式编程)
Function一个可以进行高阶函数式编程的模块. chain def chain[a](fs: Seq[(a) ? a]): (a) ? a 把一些列的方法串起来,挨个执行,每个方法的结果,回作为下 ...
- 2.用Python套用Excel模板,一键完成原亮样式
from xlutils.copy import copy import xlrd import xlwt tem_excel=xlrd.open_workbook('日统计.xls',formatt ...
- jpa现有接口方法说明 (转https://www.cnblogs.com/rulian/p/6557471.html)
一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ...