robotium clickOnText(), clickInList() 问题: android 屏幕密度设置引起
来源:互联网 发布:智能配音软件 编辑:程序博客网 时间:2024/06/06 16:53
最近测试 robotiumremote control 的代码,发现robotium的clickOnText(),clickInList()工作的很不稳定,问题是找到的View的位置不正确,所以在发送 click Event 时,都点在了错误的地方。
In class com.jayway.android.robotium.solo.Clicker, in methodclickOnScreen(finalView view,boolean longClick, int time): the code use Android View’s API getLocationOnScreen() to get thescreen location of the view to be clicked, here the location willbe always wrong!!!
后来Renas 说这个问题在 Robotium Q&Ahttp://code.google.com/p/robotium/wiki/QuestionsAndAnswers中有描述。SeeWhy do text and button clicks get wrong?
在被测试的Android程序的Manifest.xml中加了<supports-screensandroid:anyDensity="true"/>后,这些方法工作就正常了,在solo.Clicker.clickOnScreen()中返回的位置也正确了。
看了下面的文章才明白了原因:(一部240×320像素的手机,如果设置android:anyDensity="false",Android系统会将240 x 320(低密度)转换为320×480(中密度), 那么view.getLocationOnScreen()返回的位置就是相对于320*480,所以这个位置肯定是错误的啦, 用solo.ClickOnScreen()就点不到实际的view了)
[From] http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html
如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。
首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素
<supports-screensandroid:largeScreens="true"
2.细心的人会发现自android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false",则应用会将大小密度转变成中密度,从而去加载mdpi中的资源。这里同样,当android:anyDensity="false",则应用会去加载mdpi中的资源。
总结一下:
第一:android:anyDensity="true",系统会依据屏幕密度,自动去找对应的文件夹
第二:android:anyDensity="false",
(1)
(2)
(3)
3.注意上图各种文件夹的不同表示。
drawable-hdpi该图片即适用于横屏,也适用于竖屏
drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源
3.有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int densityDpi = metric.densityDpi;
然后可以在代码中为这几种密度分别设置变量
但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。
这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置
值得一提的是:
这里的负数是完全起作用的,系统会认为它是一个负值
4.各大手机厂商对于Android操作系统都有或多或少的改动,当然这些改动会对我们应用程序产生某些影响
5. 国际化问题.
转自: http://blog.sina.com.cn/s/blog_76dfb8070100yrju.html
- robotium clickOnText(), clickInList() 问题: android 屏幕密度设置引起
- Qt如何解决Retina屏幕密度引起的问题
- Robotium中文API(04)-solo.clickInList
- Android屏幕密度
- android 屏幕密度
- Android 屏幕密度
- Android 屏幕密度
- Android屏幕密度
- android 屏幕密度
- Android屏幕密度
- Android屏幕密度dpi
- Android 修改屏幕密度
- android系统屏幕密度
- Android 屏幕密度等级
- Android修改屏幕密度
- 关于Android 奇葩分辨率相同屏幕密度下适配问题若干
- android获取屏幕尺寸、密度
- android获取屏幕尺寸、密度
- java求职路-面试笔试题-android篇
- 如何自己制作一个验证码?
- linux find命令参数及用法详解
- 第四次课后作业
- ARM体系结构与编程学习(九)
- robotium clickOnText(), clickInList() 问题: android 屏幕密度设置引起
- ARM体系结构与编程学习(十)
- MFC Dialog中F1自动弹出WinHelp窗口
- linux中的热插拔和mdev机制(深入理解嵌入式linux文件系统的制作)
- 【黑马程序员】(续)SqlHelper+三层架构 +例子1)复习创建客户和三层的知识+、(例子2)项目初始框架(HRMSys)
- 如何使得VC++6.0时刻显示行号
- 验证码应用的领域有哪些?
- 利用flashback query解决误删除表数据
- 哈工大 ACM 排序、查找算法 1002