最近下载了一个叫拍照的软件进行练习,里面有大量的图片,很适合我想要做的一些操作。有关只有apk的情况在前面已经有说明。
一.使用工具uiautomatorviewer
----- 为什么会使用这个工具?——开始使用的是hierarchyviewer,虽然它也很好用,但是对于某些控件它检测不到。
----- 这个工具的好处?—— 它直接锁定你当前的操作页面,得到页面上的布局状况,控件类型,控件id
-----如何使用?——在android sdk的tools中双击uiautomatorviewer.bat
-----注意点?——1.点击上面的按钮,出现如下提示:No Android devices were detected by adb,表示设备没有连接上android模拟器
——2.打开的安卓模拟器需要是4.1以上的版本,打开4.1的版本有不同的反应:1)有报如下错误的 2)成功打开发现没有id
——3.报如下错误:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!网上有说是打开的版本是4.1的,但是我打开4.4的也会报这个错误,只能重新打开了
二.相关操作
1.点击某个控件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public Activity a; public void test(){ //获得当前activity a= solo.getCurrentActivity(); //获取资源id int id = a.getResources().getIdentifie("platform_album_sort_btn", "id", a.getPackageName()); //通过资源id找到控件 v =a.findViewById(id); //点击控件 solo.clickOnView(v); solo.sleep(2000); }
2.向下滚屏
solo.scrollDown();
只能实现一页内的滚动,不能滚动加载下一页
3.滚动置顶
solo .scrollToTop();
4.返回上一个页面
solo.goBack();
5.上拉加载
GridView gridview = (GridView) solo.getView("gridview"); int[] location = new int[2]; gridview.getLocationOnScreen(location); location[1] = location[1] + gridview.getBottom(); // Log.i(TAG, "[Location x]: " + Integer.toString(location[0])); // Log.i(TAG, "[Location y]: " + Integer.toString(location[1])); //获取上拉加载更多拖动点的坐标 if (solo.waitForView(gridview)) { int newlistcount, listcount = gridview.getCount(); while (i<10) { i++; solo.scrollListToLine(gridview, listcount); solo.sleep(500); solo.drag(location[0] + 10f, location[0] + 10f, location[1] - 10f, location[0] - 100f, 50); solo.takeScreenshot() ; solo.sleep(2000); newlistcount = gridview.getCount(); if (newlistcount == listcount) { break; } else { listcount = newlistcount; // Log.i(TAG, "[List count]: " + Integer.toString(listcount)); } } }
6.下拉刷新
GridView gridview=(GridView)solo.getView("gridview"); int[] location=new int[2]; gridview.getLocationOnScreen(location);//获取GridView的坐标 solo.sleep(1000); solo.drag(location[0]+10,location[0]+10,location[1],location[1]+gridview.getHeight(),3);
7.左右滑动
solo.scrollToSide(Solo.RIGHT); 从右往左滑动
solo.scrollToSide(Solo.LEFT); 从左往右滑动
每次只滑动一张图片,想滑动多张用循环,但是我还不知道最后一张图片后怎么结束
8.GridView和ListView
GridView:就是一行并列几张照片的那种布局
ListView:就是一行一个的列表
这2个控件的上拉加载是类似的,只要将GridView换成ListView就ok了
9.获取相同id的某个控件
这个在选择照片的情况中经常碰到,GridView控件中有很多RelativeLayout,RelativeLayout中存在ImageView
1)能够直接获取IamgeView的id
ImageView im=(ImageView)solo.getView("album_item_photo",1);
solo.clickOnView(im);
album_item_photo为控件id,1是所选控件的那个下标
2)能获得GridView的id,没有ImageView的id
GridView gridview=(GridView)solo.getView("album_detail_grid");
RelativeLayout RL = (RelativeLayout) gridview.getChildAt(2);
ImageView im=(ImageView)RL.getChildAt(0);
solo.clickOnView(im);
或者
GridView gridview=(GridView)solo.getView("album_detail_grid");
RelativeLayout RL = (RelativeLayout) gridview.getChildAt(2);
int id = a.getResources().getIdentifier("album_item_photo", "id", a.getPackageName());
ImageView im = (ImageView) RL.findViewById(id);
ImageView im=solo.getCurrentViews(ImageView.class, RL).get(0);