一些实现和技巧记录

1、当对着文档学习 ContextualAction时,照着实现。现在遇到的问题是如何高亮选中的item。这里想到的方法是:在回掉方法中    public boolean onActionItemClicked(ActionMode mode, MenuItem item); 获取到点击所对应的view,View view = mListView.getChildAt(position); 然后设置背景即可,假如选中,view.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 假如取消,view.setBackgroundColor(getResources().getColor(android.R.color.transparent));  记得在退出CAB时或回掉onActionItemClicked时,做相应的清理工作,即可。

但是这样做会出现高亮item的错乱。错乱的原因是不正确的了解ListView.getChildAt()方法的用法。它是对于可视界面的View的获取。具体参考http://stackoverflow.com/questions/6766625/listview-getchildat-returning-null-for-visible-children,这个讨论比较清晰的说明了点击item错乱的原因。看来用这种方法来实现多行高亮,会适得其反,反而变得更复杂。干脆在Adapter中加入判断吧,这样就可以简单实现了。

2、android文档中对Drawable资源的描述中,有ClipDrawable,描述是A drawable defined in XML that clips another drawable based on this Drawable's current level. Youcan control how much the child drawable gets clipped in width and height based on the level, as wellas a gravity to control where it is placed in its overall container. Most often used to implementthings like progress bars.结合示例,很好懂。我想实现一个WIFI连接的动态图,即显示一级一级向上的View。一开始在想用自定义的View来实现,由内到外画圆环。这个等到更加熟练操作自定义View再去实现。现在可以用该资源方式实现。

在Drawable文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/wifi_alpha"
    android:clipOrientation="vertical"
    android:gravity="bottom" >
</clip>

layout文件:

    <ImageView
        android:id="@+id/custom_wifi"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        android:src="@drawable/wifi_clip"
        android:contentDescription="custom wifi" >
    </ImageView>

Java文件中循环操作:

	private void initView() {
		new Handler().postDelayed(new Runnable() {
			
			@Override
			public void run() {
				
				ClipDrawable cd = (ClipDrawable) iv.getDrawable();
				if (cd!=null ) {
					if (cd.getLevel() >= MAX_VALUE) {
						cd.setLevel(0);
					}
					cd.setLevel(cd.getLevel()+UNIT_SHOW);
					initView();
				}
			}
		}, DURATION_TIME);
	}

当设置ClipDrawable的Level为最大值时(10000)将会显示全部,这样效果就出来了。


3、ActionBar中的 ShareActionProvider 和 Drop-down Navigation 还是挺好用的。

当使用 Drop-down Navigation时,遇到了这样一个问题:即样式不统一。文档的最后给出的解决方法是:重新定义一下样式

android:actionDropDownStyle
但是,它的parent继承谁?styles.xml中有

Widget.Holo.Light.Spinner.DropDown.ActionBar
但是写进去时编译出错。那就继承

parent="@android:style/Widget.Holo.Spinner"
然后在item子项中设置background,这样spinner的背景可以改变了,但是Spinner的下拉图标没了。参考 http://blog.stylingandroid.com/styling-the-actionbar-part-4/ 的实现,即用图片资源选择器,在不同和状态显示不同的图标和背景,即可解决。

4、系统提供的参数保存框架还是挺好用的,不用自己去写布局和处理保存。它提供了布尔值的CheckBoxPreference、单选项ListPreference、字符串值的EditTextPreference以及可以启动一个Intent等,也可以相互关联。这些对于一般的参数设置已经足够了,同样也可以自定义Preference。因为之前好像没有过多接触到Preference存储框架,所以当直接看android文档时,看得模模糊糊。资料有很多,以下是一些参考理解的资料:

①android文档

http://www.oschina.net/question/54100_31833

http://www.cnblogs.com/HackingProgramer/p/4022782.html

http://blog.sina.com.cn/s/blog_6c762bb301014yme.html

http://www.javacodegeeks.com/2011/01/android-quick-preferences-tutorial.html


5、Drag and Drop这部分介绍了android平台提供的拖动功能,它可以实现数据的拖动和图片的拖动。这部分之前没有接触过,直接去看,又是云中雾中。找到了中文英文的一些资料和例子来结合,有些理解了。一般是在长按或点击时设置view.startDrag(),通知系统要拖放了。对于要监听拖放事件的view来说,要view.setOnDragListener(),回调方法中对视图效果进行切换,对Drag拖放所处的状态进行判断并进行相应的处理,这些在文档中和下列的资料中非常清楚的有记录。

①android文档

一个例子

相应的中文翻译文档

6、Android提供了无障碍访问的机制。为的是方便一些有行为障碍的人或者在一些特定情景不能正常使用APP的人。可以使用系统提供的一些准则,比如①Describe user interface controls②Enable focus-based navigation③Custom view controls④No audio-only feedback。其中最容易实现的是,给ImageButton、ImageView、CheckBox提供android:contentDescription属性。也可以实现自己的Accessibility Service,这部分没有去看。

7、Styles and Themes部分清晰的介绍了为什么使用样式和主题,如何使用,如何继承,其中的属性从哪里可以得到。既有实际的例子,也有参考的文档。

8、App Resources这部分介绍了资源的命名规则,android平台如何选择合适的资源文件夹,放置资源时要注意的一些问题,比如提供默认的资源,比如使用别名,比如处理当配置发生变化时(屏幕方向,大小,键盘等)如何处理。这部分在开发中适配各种屏幕的大小,国际化有参考意义。

9、看到Canvas and Drawables 部分了,基本上可以做个暂时的结束。下面还留有Web apps部分,这部分可以找时间再看。其中有涉及到自定义View的绘制、属性动画、视图动画,Canvas and Drawables。其中,文档中介绍了Snake例子。于是,自己实现了大概的。TileView作为父类,抽象了绘画。SnakeView则继承TileView补充和完成Snake的移动和状态。TileView中,在onSizeChanged()方法中得到View的大小,并计算整个屏幕可以分为多少个格子。并在SnakeView中不断更新,更新的频率巧妙的用了Handler类的sendMessageDelay()方法。绘画则是存储在二维数组中的格子中绘制不同的Bitmap。其中,有个需要记录的是。当我按下按键或onTouch时,自定义View无法得到响应。原因是View没有获取到焦点,所以要 view.setFocusable() 和 view.requestFocus() 以获取焦点。完成之后,感到snake游戏的开发其实还是简单的。源码记录下载

10、现在要学习一个CustomView Sample,还是有难度的。即文档中例子 PieChat。难在有一些没有接触过或不记得。如果逐点解决的话,可以尝试下。首先是Paint的setMiskFilter(),MiskFilter其中有个作用即设置Bitmap的模糊状态。而其中Bitmap有个extractAlpha()方法,可以获取Bitmap的Alpha值,而在搭配paint可以制作阴影,一个例子。发现这个PieChat涉及到的东西有些多,稍偏移了学习自定义View的初衷。于是,搜索了下。找到了这么一篇博文,阅读博文和其中的代码,对自定义View和ViewGroup有了进一步的认识。

11、

结语:学习document也不记得前后一共用了多少时间,其中有一些是快速的略过。学习document是找到了源头,之前看到了好一些记录,教程都可以从文档中找到更详细的答案。第一手资料是非常重要的。暂且先这样吧,可以开始学习一些开源的组件了。之后是一些开源项目的模仿学习。要注重效率!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端app的自动化测试的设计与实现是一项非常重要的任务,因为移动应用程序已经成为人们日常生活中不可或缺的一部分。为了确保应用程序的质量和稳定性,开发人员需要对其进行充分的测试。本次答辩记录综述将讨论移动端app自动化测试的设计和实现。 在答辩中,研究人员首先介绍了移动应用程序的自动化测试的必要性和重要性。由于移动应用程序的复杂性和多样性,手动测试是一项非常耗时且易出错的任务。因此,自动化测试成为一种更加高效和可靠的测试方式。 然后,研究人员讨论了移动应用程序自动化测试的设计和实现过程。他们介绍了一些主流的自动化测试框架和工具,包括Appium、Robotium、Calabash和Monkey等。这些工具提供了多种自动化测试策略,包括UI自动化测试、性能测试、安全测试和功能测试等。 接下来,研究人员详细介绍了一个基于Appium的自动化测试框架,该框架包括测试环境的搭建、测试用例的设计和执行、测试结果的分析和报告等方面。他们还提供了一些实例来说明如何使用该框架进行自动化测试,并分享了一些经验和技巧,以帮助开发人员更好地进行移动端应用程序的自动化测试。 最后,在答辩中,研究人员总结了移动端应用程序自动化测试的设计和实现,强调了自动化测试的重要性和优势,并鼓励开发人员采用自动化测试来提高软件质量和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值