代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)

因为需求的缘故,需要对liview显示项做黑白相间的处理:

其实就是在函数public View getView(int position, View convertView, ViewGroup parent)

中,加上:

if (position % 2 == 0) {
                convertView.setBackgroundResource(R.drawable.list_gray_9);
            } else {
                convertView.setBackgroundResource(R.drawable.list_white_9);
            }  

可是,正如上述代码可见,我加入的是9-patch图片,直接导致我的convertView中的内容无法正常显示了。

这可怎么办呢?我在xml中直接设置9-patch给一个layout什么的,都是正常显示呀,这个怎么就出问题了呢?

问题在于以下函数:

public void setBackgroundResource (int resid) Set the background to a given resource. The resource should refer to a Drawable object or 0 to remove the background.

也就是说,其实setBackgroundResource接着调用的应该是:setBackgroundDrawable函数,让我们看看setBackgroundDrawable的描述:

public void setBackgroundDrawable (Drawable d) Since: API Level 1 Set the background to a given Drawable, or remove the background. If the background has padding, this View‘s padding is set to the background‘s padding. However, when a background is removed, this View‘s padding isn‘t touched. If setting the padding is desired, please use setPadding(int, int, int, int).Parametersd The Drawable to use as the background, or null to remove the background

也就是说,因为9-patch有自己的padding,所以convertView自己的padding被覆盖了!那可咋办呢?

其实知道这个了就很简单了,只要在代码setBackgroundResource之后加上(Remember:一定是这句之后!)一句:

convertView.setPadding(0, 0, 0, 0);

就可以解决问题了~

时间: 2024-08-19 11:28:03

代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)的相关文章

C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序 2.效果图: 如下图所示,多窗体嵌套,其中一个是父窗体,其条是子窗体. 横向排列下面的窗体: 纵向排列下面的窗体: 关闭全部子窗

在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色

今天由于公司项目需求,须要实现一种类似tab的选项卡,当时直接想到的就是使用RadioGroup和RadioButton来实现. 这种方法全然没问题.可是在后来的开发过程中,却遇到了一些困扰非常久的小困难.大概需求是:在代码中.动态的获取tab的个数,然后初始化RadioGroup,每个tab相应一个RadioButton,即加入一个tab就要向RadioGroup中add一个RadioButton,然后在button选中时要更改文字颜色.由于是动态加入,所以无法在xml中配置了RadioBut

VC++ 设置控件显示文本的前景色、背景色以及字体

在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色.背景色以及字体.该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘制之前擦除其客户区. HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Retur

Image控件显示以byte[]字节数组形式存在的图片

工作中遇到了这样的一个问题.起初觉得很简单,获得了图片的byte[]后,可以将其转换成内存中的图片对象(如System.Drawing.Image),而后赋给页面的Image控件.尝试后才发现这样根本做不到.搜索网络,整理出两种实现的方法. 示例代码在此! 一.引入一新页面.aspx,Image控件URL指向该页面 该页面ImageSource.aspx只完成一件事:将代表图片的byte[]写入http输出流. 1 Response.BinaryWrite(imgBytes); 该页面的执行效果

Android中设置控件的背景颜色的方式整理

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 在Android开发中,经常需要设置控件的背景颜色或者图片的src颜色. 效果图 代码分析 根据使用的方法不同,划分为 setBackgroundColor方法[一般用于RelativeLayout.TextView等控件] 使用colors.xml文件中的颜色 使用颜色的int类型值 使用颜色的16进制类型值 setImageDrawable方法[一般用于ImageView控件] 使用colors.xml文件中的颜色 使用颜色的int

C# WinForm解决Panel控件中的图片刷新时会闪烁的问题

最近在项目开发过程中,使用Panel控件显示座位背景图,在分屏切换时,发现背景图会闪烁.在同事的帮助下,通过以下方法解决了: 新建一个类,继承Panel控件类,然后开启该控件的双重辅助缓冲区,禁止擦除背景,具体请看代码: 1.新建一个NewPanel类,继续Panel控件类 using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using Sys

[iOS微博项目 - 1.8] - 各种尺寸图片加载 & 控件不显示研究

A. 图片的加载: [UIImage imageNamed:@"home"];  加载png图片    一.非retina屏幕  1.3.5 inch(320 x 480)  * home.png    二.retina屏幕  1.3.5 inch(640 x 960)  * [email protected]    2.4.0 inch(640 x 1136)  * [email protected](如果home是程序的启动图片,才支持自动加载)    三.举例(以下情况都是系统自

代码方式给控件添加背景图片(WPF)

wpf中常常需要给控件添加背景图片,下边以wrapPanel为例,使用代码添加背景图片 WrapPanel xwraPanel = new WrapPanel(); ImageBrush ximgBrush = new ImageBrush(); Uri xuri = new Uri("pack://application:,,,/Images/JXimgs/MeterLayout.png", UriKind.Absolute); //注意这个的写法 ximgBrush.ImageSo

VS2010/MFC常用控件:图片控件Picture Control

图片控件Picture Control 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到的静态文本框都是静态文本控件,因此两者的使用方法有很多相同之处,所属类都是CStatic类,有关成员函数已在前面介绍,这里就不重复了. 图片控件静态和动态加载图片 鸡啄米下面为大家演示如何为图片控件静态和动态加载位图图片. 1. 图片控件静态加载图片 1)创建一个基于对话框的MFC工程,名称设置为“