博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决2.3.x某些系统中listview超出item高度部分灰色背景问题
阅读量:4969 次
发布时间:2019-06-12

本文共 2233 字,大约阅读时间需要 7 分钟。

原文地址:

发帖人 
Administrator Henry_Yao 修改时间  12-30-2011 04:06 PM - 上次编辑时间  12-30-2011 04:06 PM
本博文来源于Suzanne Alexandra 英文博文Why Does My ListView Look Different?”

 

 

        正如在中提到的,Motorola设备升级到Android 2.3.x Gingerbread版本后,该版本增加了新的 Android 样式(style)和主题(theme)。你可能发现了你的应用中的某些视图在升级后的设备上看上去发生了变化。

 

        作为Android开发者,你已经知道  是一个或多个的属性/值对,来定义视图 (View) 的外观。主题也类似,只是它对一个activity或应用起作用。样式和主题都是从Android平台中的内置主题继承而来,所以本文的主题都从 android:Theme 继承而来:

 

        所有我们没有显式定义的样式都从平台主题定义的样式向下合并而来。

 

        然而在升级到 Android 2.3 的 Motorola 设备上,内置主题定义的某些属性值已经发生改变,如ThemeTheme.BlackTheme.Light 和其它你可能继承的内置主题。 要查看某个 Android 版本中的内置主题,你可以在 MOTODEV Studio(或带ADT的Eclipse)中打开一个XML layout文件,并检查 GraphicalLayout 视图。

 

        这对你的应用有何影响呢?默认地,有些视图如 ,  等使用设备上的可用主题来显示。所以如果你不做任何事,你的应用将从  android:Theme 继承 --- 但 android:Theme 在这种情况下的显示会与默认的 Android 版本不同。 

 

        当然你可以为你的应用定义传统的风格或主题。它需要付出更多的工作,但能提供你需要的外观,并使你的应用能更灵活地运行在各种设备中。

 

定义ListView

 

          ListView 是Android视图中最常用的,所以本文将重点讨论它。你可以在 XML 中定义一个ListView,如下例:

 

 

 

         这是一个很直观的 ListViewlayout_width layout_height 的值都设置成 match_parent(在更早的Android版本中使用的是 fill_parent),我们期望 ListView 填充整个屏幕。它有一个背景图片cacheColorHint 设置成透明色#00000000(参见   以更好地理解 ListView 中如何使用cacheColorHint

 

        但当你在Android2.3版本的设备上显示这个列表时,并且这个列表的行数不能填充屏幕时,会出现如下图的效果。

 

listtesttwo-on-droidx.png

 

 

      列表下方的灰色背景是从设备的主题继承而来的。它的目的是提示用户列表内容结束了。

 

      对比一下,在运行Android 3.1 的 Motorola XOOM 平板上(在一个没有碎片的简单屏幕)显示同一个ListView 的效果:

 

listtest-on-xoom.png

 

 

        如果你希望在 Motorola Android 2.3.x 设备上显示列表下方为灰色,并希望你的应用与设备融于一体,而不是在不同的设备上显示一样,那么你可以不用做任何事情。

 

 

简单的解决方案

 

        但如果你(或你的客户或用户)希望 ListView 的背景全屏显示,或你的应用在不同设备上看起来一样,可以采用一个简单的方案: ListView中使用Android2.3 Gingrebread 中新增加的overScrollFooter属性。如果你设置 overScrollFooter 为 @null, 列表下方的背景变为透明,你的背景图片就能显示出来。

 

 

         这一次,列表填充了整个屏幕。

 

listtest-fixed.png

 

 

      如果你希望列表下方显示不同颜色,你可以设置 overScrollFooter 为某个颜色,如下例:

 

android:overScrollFooter="#aa000000" android:overScrollFooter="@drawable/my_drawable"

 

保持代码简洁

 

       因为 overScrollFooter 是在Android2.3 引入的,如果你想让你的应用支持不同的Android版本,你应当在支持Gingerbread及更高版本的主题中定义它。

 

       接下来在res/values-v10/styles.xml文件中,为你的 ListView 创建一个样式, 它从内置的Widget.ListView 继承,并设置overScrollFooter 为 @null:

 

 

 

       完整的样式要素 (element )列表参见  。

 

       然后在应用的主题中设置传统的样式:

 

 

       最后在你的 AndroidManifest 中使用你的传统主题:

 

 

       你还需要用Android2.3 编译应用,并 res/values 中创建一个相应的 styles.xml 文件,它不使用 verScrollFooter,这样能在低于API 级别10 的设备上使用。

 

       使用样式和主题使你的代码简洁(DRY) --- 即 --- 因为你可以定义样式,然后复用它们。本文的方法能使你的代码简洁,并解决列表下方背景颜色问题。

转载于:https://www.cnblogs.com/baiyongquan/archive/2012/06/28/2567330.html

你可能感兴趣的文章
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
每次阅读外文技术资料都头疼,终于知道原因了。
查看>>
130242014034-林伟领-实验一
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
C语言结构体和函数
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
洛谷 [P3033] 牛的障碍
查看>>
centos iptables
查看>>
unity3d 移动与旋转 2
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>