第一篇:iOS UITextField控件总结
iOS UITextField控件总结
//初始化textfield并设置位置及大小
UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];
//设置边框样式,只有设置了才会显示边框样式
text.borderStyle = UITextBorderStyleRoundedRect;typedef enum {
UITextBorderStyleNone,UITextBorderStyleLine,UITextBorderStyleBezel,UITextBorderStyleRoundedRect
} UITextBorderStyle;
//设置输入框的背景颜色,此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉
text.backgroundColor = [UIColor whiteColor];
//设置背景
text.background = [UIImage imageNamed:@“dd.png”];
//设置背景
text.disabledBackground = [UIImage imageNamed:@“cc.png”];
//当输入框没有内容时,水印提示 提示内容为password text.placeholder = @“password”;
//设置输入框内容的字体样式和大小
text.font = [UIFont fontWithName:@“Arial” size:20.0f];
//设置字体颜色
text.textColor = [UIColor redColor];
//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容
text.clearButtonMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever, 从不出现
UITextFieldViewModeWhileEditing, 编辑时出现
UITextFieldViewModeUnlessEditing, 除了编辑外都出现
UITextFieldViewModeAlways 一直出现 } UITextFieldViewMode;
//输入框中一开始就有的文字
text.text = @“一开始就在输入框的文字”;
//每输入一个字符就变成点 用语密码输入
text.secureTextEntry = YES;
//是否纠错
text.autocorrectionType = UITextAutocorrectionTypeNo;
typedef enum {
UITextAutocorrectionTypeDefault, 默认
UITextAutocorrectionTypeNo, 不自动纠错
UITextAutocorrectionTypeYes, 自动纠错 } UITextAutocorrectionType;
//再次编辑就清空
text.clearsOnBeginEditing = YES;
//内容对齐方式
text.textAlignment = UITextAlignmentLeft;
//内容的垂直对齐方式 UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
//设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动
textFied.adjustsFontSizeToFitWidth = YES;
//设置自动缩小显示的最小字体大小
text.minimumFontSize = 20;
//设置键盘的样式
text.keyboardType = UIKeyboardTypeNumberPad;
typedef enum {
UIKeyboardTypeDefault,默认键盘,支持所有字符
UIKeyboardTypeASCIICapable, 支持ASCII的默认键盘
UIKeyboardTypeNumbersAndPunctuation, 标准电话键盘,支持+*#字符
UIKeyboardTypeURL,URL键盘,支持.com按钮 只支持URL字符 UIKeyboardTypeNumberPad,数字键盘 UIKeyboardTypePhonePad,电话键盘
UIKeyboardTypeNamePhonePad, 电话键盘,也支持输入人名 UIKeyboardTypeEmailAddress, 用于输入电子 邮件地址的键盘
UIKeyboardTypeDecimalPad,数字键盘 有数字和小数点
UIKeyboardTypeTwitter,优化的键盘,方便输入@、#字符
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, } UIKeyboardType;
//首字母是否大写
text.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone, 不自动大写
UITextAutocapitalizationTypeWords, 单词首字母大写
UITextAutocapitalizationTypeSentences, 句子的首字母大写
UITextAutocapitalizationTypeAllCharacters, 所有字母都大写 } UITextAutocapitalizationType;
//return键变成什么键
text.returnKeyType =UIReturnKeyDone;
typedef enum {
UIReturnKeyDefault, 默认 灰色按钮,标有Return
UIReturnKeyGo, 标有Go的蓝色按钮
UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索
UIReturnKeyJoin,标有Join的蓝色按钮
UIReturnKeyNext,标有Next的蓝色按钮
UIReturnKeyRoute,标有Route的蓝色按钮
UIReturnKeySearch,标有Search的蓝色按钮
UIReturnKeySend,标有Send的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyEmergencyCall, 紧急呼叫按钮 } UIReturnKeyType;
//键盘外观
textView.keyboardAppearance=UIKeyboardAppearanceDefault; typedef enum { UIKeyboardAppearanceDefault,默认外观,浅灰色 UIKeyboardAppearanceAlert,深灰 石墨色
} UIReturnKeyType;
//设置代理 用于实现协议
text.delegate = self;
//把textfield加到视图中
[self.window addSubview:text];//最右侧加图片是以下代码
左侧类似
UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@“right.png”]];
text.rightView=image;
text.rightViewMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever,UITextFieldViewModeWhileEditing,UITextFieldViewModeUnlessEditing,UITextFieldViewModeAlways } UITextFieldViewMode;
//按return键 键盘往下收 becomeFirstResponder
类要采用UITextFieldDelegate协议
text.delegate = self;声明text的代理是我,我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议
-(BOOL)textFieldShouldReturn:(UITextField *)textField { [text resignFirstResponder];//主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收 return YES;}
重写绘制行为
除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
– textRectForBounds:
//重写来重置文字区域
– drawTextInRect:
//改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.– placeholderRectForBounds: //重写来重置占位符区域
– drawPlaceholderInRect: //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.– borderRectForBounds: //重写来重置边缘区域 – editingRectForBounds: //重写来重置编辑区域
– clearButtonRectForBounds: //重写来重置clearButton位置,改变size可能导致button的图片失真 – leftViewRectForBounds: – rightViewRectForBounds: 委托方法
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;}
-(void)textFieldDidBeginEditing:(UITextField *)textField{ //开始编辑时触发,文本字段将成为first responder }
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
//要想在用户结束编辑时阻止文本字段消失,可以返回NO
//这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息
return NO;}
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;}
-(BOOL)textFieldShouldClear:(UITextField *)textField{
//返回一个BOOL值指明是否允许根据用户请求清除内容
//可以设置在特定条件下才允许清除内容
return YES;}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];//查一下resign这个单词的意思就明白这个方法了
return YES;}
通知
UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件
UITextFieldTextDidBeginEditingNotification UITextFieldTextDidChangeNotification UITextFieldTextDidEndEditingNotification 当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知
UIKeyboardWillShowNotification //键盘显示之前发送 UIKeyboardDidShowNotification //键盘显示之后发送 UIKeyboardWillHideNotification //键盘隐藏之前发送 UIKeyboardDidHideNotification //键盘隐藏之后发送
1、Text :设置文本框的默认文本。
2、Placeholder : 可以在文本框中显示灰色的字,用于提示用户应该在这个文本框输入什么内容。当这个文本框中输入了数据时,用于提示的灰色的字将会自动消失。
3、Background :
4、Disabled : 若选中此项,用户将不能更改文本框内容。
5、接下来是三个按钮,用来设置对齐方式。
6、Border Style : 选择边界风格。
7、Clear Button : 这是一个下拉菜单,你可以选择清除按钮什么时候出现,所谓清除按钮就是出一个现在文本框右边的小 X,你可以有以下选择:
7.1 Never appears : 从不出现
7.2 Appears while editing : 编辑时出现
7.3 Appears unless editing :
7.4 Is always visible : 总是可见
8、Clear when editing begins : 若选中此项,则当开始编辑这个文本框时,文本框中之前的内容会被清除掉。比如,你现在这个文本框 A 中输入了 “What”,之后去编辑文本框 B,若再回来编辑文本框 A,则其中的 “What” 会被立即清除。
9、Text Color : 设置文本框中文本的颜色。
10、Font : 设置文本的字体与字号。
11、Min Font Size : 设置文本框可以显示的最小字体(不过我感觉没什么用)
12、Adjust To Fit : 指定当文本框尺寸减小时,文本框中的文本是否也要缩小。选择它,可以使得全部文本都可见,即使文本很长。但是这个选项要跟 Min Font Size 配合使用,文本再缩小,也不会小于设定的 Min Font Size。接下来的部分用于设置键盘如何显示。
13、Captitalization : 设置大写。下拉菜单中有四个选项:
13.1 None : 不设置大写
13.2 Words : 每个单词首字母大写,这里的单词指的是以空格分开的字符串
13.3 Sentances : 每个句子的第一个字母大写,这里的句子是以句号加空格分开的字符串
13.4 All Characters : 所以字母大写
14、Correction : 检查拼写,默认是 YES。
15、Keyboard : 选择键盘类型,比如全数字、字母和数字等。
16、Appearance:
17、Return Key : 选择返回键,可以选择 Search、Return、Done 等。
18、Auto-enable Return Key : 如选择此项,则只有至少在文本框输入一个字符后键盘的返回键才有效。
19、Secure : 当你的文本框用作密码输入框时,可以选择这个选项,此时,字符显示为星号。
1.Alignment Horizontal 水平对齐方式 2.Alignment Vertical 垂直对齐方式
3.用于返回一个BOOL值 输入框是否 Selected(选中)Enabled(可用)Highlighted(高亮)
限制只能输入特定的字符
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSCharacterSet *cs;
cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@“"];//按cs分离出数组,数组按@”“分离出字符串
BOOL canChange = [string isEqualToString:filtered];
return canChange;}
上面那个NUMBERS是一个宏,可以在文件顶部定义:
#define NUMBERS @”0123456789n”(这个代表可以输入数字和换行,请注意这个n,如果不写这个,Done按键将不会触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入n,好惨,我在项目中才发现的。)所以,如果你要限制输入英文和数字的话,就可以把这个定义为: #define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。如果你觉得有需要的话。
限制只能输入一定长度的字符
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;{ //string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反
if([string isEqualToString:@”n“])//按回车可以改变
{
return YES;
}
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];//得到输入框的内容
if(self.myTextField == textField)//判断是否时我们想要限定的那个输入框
{
if([toBeString length] > 20){ //如果输入框内容大于20则弹出警告
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@”超过最大字数不能输入了“ delegate:nil cancelButtonTitle:@”Ok" otherButtonTitles:nil, nil] autorelease];
[alert show];
return NO;
}
}
return YES;}
第二篇:dxp控件总结
From 属性:
1.MaximizeBox:是否显示最小化按钮。2.MinimizeBox:是否显示最大化按钮。
3.FormBorderStyle:窗口样式,如FixedSingle:固定大小。4.StartPosition:初始显示的位置,CenterScreen:中心。
事件:
TreeList: 属性:
1.隐藏列头:设置OptionsView中的ShowColumns改为false 2.隐藏每行最左边的指示箭头:设置OptionsView中的ShowIndicator改为false 3.隐藏父节点的指示箭头:设置OptionsView中的ShowRoot改为false 4.selectImageList:给TreeList绑定imageCollection 5.OptionsView.ShowVertLines:是否显示网格线(竖直的)6.OptionsView.ShowHorzLines:是否显示网格线(水平的)
7.OptionsSelection.EnableAppearanceFocusedCell:选中单元格,是否改变该单元格外观(选中后该单元格有边线或不显示边线)
8.OptionsSelection.EnableAppearanceFocusedRow:选中行。是否改变该行的外观(选中后该行底色是否变化)
9.OptionsView.ShowCheckBoxes:是否在每一行前显示勾选框。
事件:
1.FocusedNodeChanged:焦点改变后触发
2.treeList_Enter:第一次点击是触发,初始化控件时候,焦点会在第一行,此时就触发。3.CustomNodeCellEdit:鼠标选中某个Cell时触发,可以实现动态的设定Cell绑定的控件类型 4.MouseDoubleClick:双击节点触发
5.FocusedColumnChanged:选中列改变时触发,即前后点击的列不一样时触发(即使前后选中列不在一行,只要选中列改变就会触发,与行无关。若前后选中列中某列的ReadOnly = ture则不会触发该事件)
6.MouseDoubleClick:鼠标双击节点时触发。7.MouseUp:鼠标点击节点弹起时触发。(e.Button可以得到曾按下的是哪个按钮)8.SelectImageClick:点击SelectImage触发 9.StateImageClick:点击StateImage触发 10.BeforeExpand:节点展开之前 11.BeforeFocusNode:焦点选中之前
DevExpress.XtraTreeList.StyleFormatConditions.StyleFormatCondition styleFormatCondition = new DevExpress.XtraTreeList.StyleFormatConditions.StyleFormatCondition();styleFormatCondition.Appearance.ForeColor = System.Drawing.Color.DarkGray;styleFormatCondition.Appearance.Options.UseForeColor = true;styleFormatCondition.ApplyToRow = true;styleFormatCondition.Condition = DevExpress.XtraGrid.FormatConditionEnum.Expression;styleFormatCondition.Expression = “[Style]”;this.treeList1.FormatConditions.Add(styleFormatCondition);
treeListColumn:TreeList中添加的列
属性:
1.表示这一列为只读:OptionsColumn中的ReadOnly = True 2.固定列的宽度不变:OptionsColumn中的FixedWidth = True 3.表示这一列不可编辑(无法实现复制):OptionsColumn中的AllowEdit = False 4.FieldName: 5.UnboundType:
6.SortOrder:列表中的项排序,SortOrder =Descending,递减排序。SortOrder = Ascending,递增排序。
treeList.AppendNode();//添加节点(TreeListNode)
TreeListNode:(TreeList中的节点)
属性: 1.ImageIndex:正常情况下节点前面显示的图片的索引
2.SelectImageIndex:选中节点时节点前边显示的图片的索引
3.StateImageIndex:节点开头显示的图片索引(在SelectImageIndex之后)4.Level:节点的级别(0:根节点、1:一级节点···)imageCollection 属性:
1.Images:在imageCollection中添加图片
ImageComboBoxEdit ComboBoxEdit 属性:
1.调整下拉菜单直观显示出来的行数(即不用滚动条就可以看的到的行数):DropDownRows 2.Properties.Items:绑定数据源
3.Properties.TextEditStyle:Standard(可输入,可选),HideTextEditor(只能通过下拉菜单选择,选中后不在界面上显示),DisableTextEditor(只能通过下拉菜单选择并且选中后在界面上显示)
4.ToolTip:
5.SelectedIndex:选择的Item的索引(get,set)
事件:
1:EditValueChanged:只要是值改变就会触发 2:SelectedIndexChanged:(值改变触发)SelectedIndex改变触发。3:SelectedValueChanged:(值改变触发)SelectedValue改变触发。
4:DrawItem:光标在下拉菜单上移动的时候触发,即光标在选择项上来回移动时触发
ComboBox(win)
属性:
1.DroppedDown:设置/获取下拉菜单是否展开。
2.SelectionStart:设置光标的位置(输入文本时用,设置为Text.Length可以保证光标在最后一个字符的后面,避免将前边的字符覆盖掉)。事件:
1.TextUpdate:输入的值时(text属性值改变时)触发。(在TextChanged事件之前)2.TextChanged:输入的值时(text属性值改变时)触发。(在TextUpdate事件之后)3.MouseDown:鼠标在控件上按下时触发。
LabelControl:
属性: 事件:
notePane:
属性:
1.MaxRow:设置notePane最大显示行数
TextEdit:单行文本输入
事件:
1.EditValueChanged:TextEdit值改变时候触发
2.Validating:焦点离开TextEdit时触发,验证有效性(有效性的标准通过自己在事件里面的代码来写,若设置了EditMask,进入该事件会先自动根据EditMask为标准来验证有效性,完成之后执行事件里面的代码)3.KeyPress:键盘按下某一个键触发。
属性:
1.TextEdit.Mask.EditMask:可以规定输入的格式,类似正则表达式
2.TextEdit.Mask.MaskType:指定可填写的文本类型(如:数字、字符串或者是根据正则表达式(RegEx)来约束···EditMask与MaskType配合使用,若MaskType= RegEx,EditMas = 某正则表达式,当MaskType是DateTime,Numeric时,EditMask为指定的相应类型)3.MaxLength:可填的最大字符长度,仅当MaskType = None时有效
4.TextEdit.Mask.BeepOnError:当用户输入不满足EdiMask要求时,是否发beep声。5.UseSystemPasswordChar: true –密码框(输入的内容在界面上是 ****)6.实现水印文字:Properties.NullValuePrompt = “输入密码”
Properties.NullValuePromptShowForEmptyValue = true;
memoEdit:多行文本输入
属性: 事件:
checkEdit:
属性:
1.Checked:是否选中
事件:
1.CheckedChanged:勾选状态改变时触发(选中变不选中,不选中变选中)
checkedListBoxControl:(实现多选框)
属性: 事件:
1.DrawItem:光标在选择菜单上移动的时候触发,即光标在选择项上来回移动时触发(与ComboBoxEdit的DrawItem事件相似)2.ItemCheck:勾选或取消勾选Item时触发。(e.Index:点击的Item的索引,e.State:改变的状态)3.方法: 1.UnCheckAll();//全部不选 2.CheckAll();//全选中
PopupContainerEdit:
属性:
1. Properties.PopupControl:(PopupContainerEdit和PopupContainerControl组合,实现下拉组合框)this.popupContainerEdit1.Properties.PopupControl = this.popupContainerControl1;
事件:
1.EditValueChanged 2.QueryResultValue PopupContainerControl:
属性: 事件:
splitContainerControl: barManager: popupMenu:
lookUpEdit:
属性:
1.Properties.DataSource:绑定数据(可以直接将list<>赋值给它)。
2.Properties.TextEditStyle:Standard(可输入),HideTextEditor(只能通过下拉菜单选择,选中后不在界面上显示),DisableTextEditor(只能通过下拉菜单选择并且选中后在界面上显示)3.事件:
panelControl:
属性:
1.BorderStyle(边框风格):NoBorder–无边框,事件:
wizardControl:
属性:
1.HeaderImage:右上角图片。2.CancelText:3.FinishText:4.NextText:5.PreviousText:
当在最后一页时中间按钮变为“结束”
事件:
1.CancelClick:点击“取消”触发。2.FinishClick:最后一页点击结束触发。3.SelectedPageChanging:切换页面时触发。(e.Direction:判断是向前翻页还是向后翻页,e.Page:新页)
4.SelectedPageChanged:切换页面后触发。(e.PrevPage:旧页)
wizardPage:(wizardControl中的每一页)
属性:
1. DescriptionText:2. Text:
事件:
1.PageValidating:验证事件。(e.Direction:判断是向前翻页还是向后翻页,e.Valid = false;翻不过去)2.simpleButton:
属性:
1.事件: buttonEdit:
属性: 事件:
dropDownButton: 属性:
1.DropDownControl:(dropDownButton控件实现下拉框)
增加2个控件barManager1。
dropDownButton 的DropDownControl属性选择popupMenu1。popupMenu1的Manager属性选择事件:
radioGroup:
属性: 事件:
spinEdit:
属性:
1.Appearance.TextOptions.HAlignment:输入的文本的位置,如:Near,近前边。,靠事件:
GridControl 事件: 1.MouseDoubleClick:双击某一行。
gridView
属性:
1.OptionsBehavior.Editable:是否可用
vGridControl 属性:
1.2.3.4.5.OptionsBehavior.Editable:是否可用
OptionsBehavior.ResizeHeaderPanel:是否可以拖拽改变每一行的高度 OptionsBehavior.ResizeRowHeaders:是否可以拖拽改变每一列的宽度。LayoutStyle:布局风格
OptionsView.AutoScaleBands:当LayoutStyle为SingleRecordViewBandsView,设置该属性为true,列宽自动填充 6.XtraTabControl 属性:
1.ClosePageButtonShowMode:如何显示每个tabPage上的关闭按钮。
如:InActiveTabPageHeader:当TabPage为当前选中时显示关闭按钮。2.HeaderLocation:标签位置(上下左右)3.ShowTabHeader:是否显示标签
4.HeaderOrientation:标签方向(Horizontal:水平,Vertical竖直)5.HeaderButtons:当tabpage过多,需要翻页时,设置翻页按钮如何组合。如
6.TabPageWidth:统设标签宽度。
事件:
1.CloseButtonClick:点击标签上的X按钮事件
XtraTabPage:
属性:
1.ShowCloseButton:是否显示关闭按钮。2.TabPageWidth:这一页的标签宽度。
第三篇:手机Android系统常用控件总结
找工作,上长沙英才网
手机Android系统常用控件总结
Notepad++编写 可以负责粘贴到其中去 看得更清楚。(内容包括了Android中的大部分常用控件及其事件的监听)第一章
1.1 Android中src文件夹包含项目的所有包及其资源文件,res文件夹包含了项目中所有的资源。比如:程序图标(drawable),布局文件(layout),常量(value),音频文件(raw)R.java是在创建项目是自动生成的只读文件,不可更改此文件。R文件其作用:是定义项目中所有资源的索引文件。
1.2 AndroidManfest.xml 如下:
package=“Android.Summary” //引用程序包名 android:versionCode=“1” android:versionName=“1.0”> 找工作,上长沙英才网
1.3 String.xml如下:
Resources r = this.getContext().getResources();//通过Context的getResource()实例化一个Resources对象
String app_name =((String)r.getString(R.string.app_name));//然后通过getString()方法取得指定的索引的字符串。项目中所有常量都可以在String.xml文件中定义
String hello =((String)r.getString(R.string.hello));
1.4 main.xml如下:
找工作,上长沙英才网
android:orientation=“vertical” //版面配置的方式。此为自上到下为垂直配置,“horizontal”为水平配置 android:layout_width=“fill_parent” //定义当前视图在屏幕上所占的宽度,“fill_parent”为填充整个屏幕宽度 /*android:layout_weight=“50”*/ //用于给一个布局中多个视图的重要度赋值 android:layout_height=“fill_parent” //定义当前视图在屏幕上所占的高度,...........................高度 > android:text=“@string/hello” //在视图上显示的内容,此处引用了@String中的hello字符串 />
1.5 src下的java 如下: package Android.Summary;
import android.app.Activity;import android.os.Bundle;
public class SummaryActivity extends Activity { //继承自Activity /** Called when the activity is first created.*/ @Override
找工作,上长沙英才网
public void onCreate(Bundle savedInstanceState){ //重写onCreate()方法
super.onCreate(savedInstanceState);setContentView(R.layout.main);//设置要显示的布局 } } 第二章
2.1 Android应用程序由四个模块组成:Activity,Service,Intent,ContentProvider(注意:一个应用程序不一定包含全部的四个模块).在使用时必须在AandroidManfest中进行声明。
Activity可以理解为用户看到屏幕,主要用于处理应用程序的整体性工作。如: a.监听系统事件,触屏事件,为用户显示指定的View,启动其他Activity等。b.所有应用的Activity都继承于android.app.Activity,该类是Android提供的基层类。
c.一个Activity通常就是一个单独的屏幕。d.每一个活动都被实现为一个独立的类。e.大多数的应用程序都是由多个Activity组成。
Intent Aandroid中主要用Intent类实现从一个Activity跳转到另一个Activity。在Intent的描述结构中,有两个重要的部分:动作和对应的数据。
典型的动作有MAIN,VIEW,PICK,EDIT.而动作对应的数据则以URI的形式表示。例如:要查一个人的联系方式,需要创建一个动作类型View的Intent ,以及一个表示这个人的URI.Intent的使用:
button1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ Intent intent = new Intent();//创建一个Intent对象
intent.setClass(Activity01.this,Activity02.class);//指明要启动的另一Activity02 startActivity(intent);//启动一个新的Activity
找工作,上长沙英才网
Activity01.this.finish();//关闭当前Activity01 } });这里需要注意在Android中对新启动的Activity进行声明。声明方式:
IntentReceiver 如果希望Android应用能够对外部事件(如电话打入时,数据网络可用时,)做出响应,可用使用IntentReceiver.虽然IntentReceiver在如上事件发生
时会使用NotificationManager通知用户,但它并不能生产UI。IntentReceiver可以在AndroidManifest.xml中注册,也可在代码中使用Context.registerReceiver 进行注册。当IntentReceiver被触发时,系统会在需要的时候启动应用。各种应用还可以通过ContentReceiver()将他们自己的IntentReceiver广播出去。???????
Content Provider 作用:主要用于不同应用程序中的数据的传递。Content Provider 是一个特殊的存储数据的类型。Android自身提供现成的Content Provider:Contacts ,Browser,CallLog,Settings,MediaStore 应用可用通过唯一的ContentResolver界面来使用具体的Conten Provider,然后可以用ContentResolver提供的方法来使用你需要的Content Provider 其中,ContentResolver提供的方法有query(),insert(),update()等。URI----String形式的Content Provider的完整路径。
下面这个这个例子通过ContentProvider获取电话本中的数据,然后显示到TextView中去。
public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){
找工作,上长沙英才网
TextView textView = new TextView(this);//得到TextView对象 String string = “";super.onCreate(savedInstanceState);
ContentResolver resolver = getContentResolver();//得到ContentResolver对象 Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);//取得电话本中开始一项的光标,通过query方法查询出符合标准的电话本记录 //向下移动光标
while(cursor.moveToNext()){ //取得联系人名字
int name_index = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);String name = cursor.getString(name_index);//取得电话号码
int number_index = cursor.getColumnIndex(PhoneLookup.NUMBER);String number = cursor.getString(number_index);
string +=(name+”:“+number+”n“);} cursor.close();textView.setText(string);//设置TextView显示的内容
setContentView(textView);//显示到屏幕上 其实TextView也是View的一种 } } 注意:在使用这些模块中用到了读取联系人的API,所以必须在AndroidManifest.xml中声明
声明方式为:
找工作,上长沙英才网
Service 后台服务,没有界面
启动service方法: a.Context.startService()b.Context.bindService()//与上一种方法不同处 如果这个Service没有处于启动状态,则将其启动
下面这个例子以Activity中的俩个控件来控制播放一首Mp3.(例中:需要在res文件夹中创建一个raw文件夹 然后放入一首MP3)
public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main);
//从main.xml布局中获得Button对象
Button button_start =(Button)findViewById(R.id.start);Button button_stop =(Button)findViewById(R.id.stop);//设置按钮(Button)监听
button_start.setOnClickListener(start);button_stop.setOnClickListener(stop);} //开始按钮
private OnClickListener start = new OnClickListener(){ public void onClick(View v){ //开启Service startService(new Intent(”com.yarin.Android.MUSIC“));} };//停止按钮
找工作,上长沙英才网
private OnClickListener stop = new OnClickListener(){ public void onClick(View v){ //停止Service stopService(new Intent(”com.yarin.Android.MUSIC“));} };}
public class MusicService extends Service{ //MediaPlayer对象
private MediaPlayer player;
public IBinder onBind(Intent arg0){ return null;} public void onStart(Intent intent, int startId){ super.onStart(intent, startId);//这里可以理解为装载音乐文件
player = MediaPlayer.create(this, R.raw.test);//开始播放 player.start();}
public void onDestroy(){ super.onDestroy();//停止音乐-停止Service player.stop();} }
AndroidManifest.xml文件中
找工作,上长沙英才网
2.2 Aandrod的生命周期
public class Activity02 extends Activity{ private static final String TAG = ”Activity02“;
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main2);Log.v(TAG, ”onCreate“);} public void onStart(){ super.onStart();Log.v(TAG, ”onStart“);} public void onResume(){ super.onResume();Log.v(TAG, ”onResume“);} public void onPause(){ super.onPause();Log.v(TAG, ”onPause“);} public void onStop(){ super.onStop();Log.v(TAG, ”onStop“);
找工作,上长沙英才网
} public void onDestroy(){ super.onDestroy();Log.v(TAG, ”onDestroy“);} public void onRestart(){ super.onRestart();Log.v(TAG, ”onReStart“);} } 这些方法都是系统自动调用的。
第三章 3.1 事件处理
* 控件事件通过设置其控件的监听器来监听并处理事件 * 按键按下事件:通过重写onKeyDown方法 * 按键弹起事件:通过重写onKeyUp方法 * 触笔点击事件:通过实现onTouchEvent方法 * 示例中使用了Toast控件:
* Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
public class Activity01 extends Activity{
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main);//获得Button对象
Button button_ok =(Button)findViewById(R.id.ok);
找工作,上长沙英才网
button_ok.setOnClickListener(new Button.OnClickListener(){------------------------//设置Button控件监听器
public void onClick(View v){ //这里处理事件
DisplayToast(”点击了OK按钮“);} });}
/* 按键按下所触发的事件*/ public boolean onKeyDown(int keyCode, KeyEvent event){ switch(keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast(”按下:中键“);break;case KeyEvent.KEYCODE_DPAD_UP: DisplayToast(”按下:上方向键“);break;case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast(”按下:下方向键“);break;case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast(”按下:左方向键“);break;case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast(”按下:右方向键“);break;} return super.onKeyDown(keyCode, event);}
找工作,上长沙英才网
/* 按键弹起所触发的事件*/ public boolean onKeyUp(int keyCode, KeyEvent event){ switch(keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast(”弹起:中键“);break;case KeyEvent.KEYCODE_DPAD_UP: DisplayToast(”弹起:上方向键“);break;case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast(”弹起:下方向键“);break;case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast(”弹起:左方向键“);break;case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast(”弹起:右方向键“);break;} return super.onKeyUp(keyCode, event);} //用于响应按键重复点击,官方API指出onKeyMultiple方法总是返回false,即它没有handle,因此必须重写才能实现-------------------此方法没用过具体情况怎么样不是很清楚?
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event){
return super.onKeyMultiple(keyCode, repeatCount, event);}
/* 触笔事件*/
找工作,上长沙英才网
public boolean onTouchEvent(MotionEvent event){ int iAction = event.getAction();//利用getAction得到所执行的动作 if(iAction == MotionEvent.ACTION_CANCEL || iAction == MotionEvent.ACTION_DOWN || iAction == MotionEvent.ACTION_MOVE){ return false;} //得到触笔点击的位置 int x =(int)event.getX();int y =(int)event.getY();//将获得的坐标转成String类型的方法 DisplayToast(”触笔点击坐标:(“+Integer.toString(x)+”,“+Integer.toString(y)+”)“);
return super.onTouchEvent(event);}
/* 显示Toast */ public void DisplayToast(String str){ Toast.makeText(this, str, Toast.LENGTH_SHORT).show();} } 我们分析了一些常用事件处理方式。每一个键都对应一个键值。当然也可根据需要来改变一些键的功能,需要我们自己构建KeyEvent对象------------------有待进一步学习
构造KeyEvent对象的几种方法: KeyEvent(int action,int code);KeyEvent(long DownTime,long EventTime,int action,int code,int repeat);KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState);
找工作,上长沙英才网
KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState,int device,int scancode);KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState,int device,int scancode,int flags);KeyEvent(KeyEvent origEvent,long EventTime,int newRepart);例:
public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main);} public boolean onKeyDown(int keyCode, KeyEvent event){ //这里构建KeyEvent对象,其功能为返回键的功能 //因此我们按任意键都会执行返回键功能
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
//这里传入的参数就是我们自己构建的KeyEvent对象key return super.onKeyDown(key.getKeyCode(), key);} } 3.2 常用控件 Button xml设计
代码设计Button button = new Button(this);
找工作,上长沙英才网
button.setText(”我是Button“);button.setWidth(123);//设置宽度 button.setHeight(123);//设置高度
button.setTextColor(Color.BLUE);//设置文字颜色 button.setTextSize(123);//设置字体大小
button.setBackgroundColor(Color.BLUE);//设置控件背景色
监听器
button.setOnClickListener(new Button.OnClickListener(){//设置按钮的事件监听
public void onClick(View v){ //处理按钮事件产生一个Toast.利用button.getText()得到按钮显示的内容
Toast toast = Toast.makeText(Activity01.this, ”你点击了““+button.getText()+””按钮!“, Toast.LENGTH_LONG);//设置toast显示的位置
toast.setGravity(Gravity.TOP, 0, 150);//显示该Toast toast.show();} });-TextView 一个用来显示文本的控件 xml设计 找工作,上长沙英才网 android:text=”你好“/> android:paddingLeft=”50px“ android:paddingTop=”5px“ android:paddingBottom=”5px“ android:textSize=”30sp“ android:singleLine=”true“ android:layout_below=”@id/imageView_handler“//在什么下 android:gravity =”left“ //用于设置View中内容相对于View组件的对齐方式,android:layout_gravity//用于设置View组件相对于Container的对齐方式。 android:paddingLeft=”30px“ // 按钮上设置的内容离按钮左边边界30个像素 android:layout_marginLeft=”30px“ //整个按钮离左边设置的内容30个像素 android:layout_weight=”1“//控件权重 即占的比例 默认值为0 android:gravity=”center_horizontal“//水平居中 android:padding=”3dip“ 代码设计TextView textView = new TextView(this);//声明对象 textView.setTextColor(Color.RED);//设置字体颜色 textView.setTextSize(20);//设置字体大小 textView.setBackgroundColor(Color.BLUE);//控件背景色 textView.setText(”你好“)//显示的文字 textView.setHeight textView.setWidth textView.setVisibility(GONE/VISIBLE);//设置为不可见/可见 textView.setGravity(Gravity.CENTER);//设置文字权重 找工作,上长沙英才网 监听器TextView textView = new TextView(this);//得到对象 textview.setOnClickListener(new TextView.OnClickListener(){------------TextView监听器 public void onClick(View v){ } });---ImageButton 带图标的按钮 xml设计 代码中设计 imageButton.setImageDrawable(getResources().getDrawable(R.drawable.image2));//在代码中设计使用的图片(得到对象后) 监听器 imageButton.setOnClickListener(new Button.OnClickListener(){--------------ImageButton监听器 @Override public void onClick(View v){ //创建对话框 Dialog dialog = new AlertDialog.Builder(ImageButton_Dialog.this) 找工作,上长沙英才网 .setTitle(”ImageButton2“).setMessage(”跳转到系统图片“).setPositiveButton(”确定“, new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which){ // TODO Auto-generated method stub imageButton2.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_action_call));} }).create();dialog.show();} });---EditText xml设计 代码设计EditText editText = new EditText(this);//得到EditText对象 editText.setTextSize(20);//设置字体大小 找工作,上长沙英才网 editText.setHint(”请输入账号“);//设置当m_EditText中为空时提示的内容 监听器 editText.setOnKeyListener(new EditText.OnKeyListener(){----------EditText监听器 @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2){ // 得到文字,将其显示到TextView中 m_TextView.setText(”文本框中内容是:“ + m_EditText.getText().toString());return false;} });--------------------CheckBox 多项选择 需要对没有按钮设置监听器 xml设计 checkBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){//对每个选项设置事件监听-------------------CheckBox监听器 @Override 找工作,上长沙英才网 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ if(m_CheckBox1.isChecked()){ DisplayToast(”你选择了:“+m_CheckBox1.getText());} } });----------------------Spinner 下拉列表 下面一个例子将可选内容通过ArrayAdapter和下拉列表连接起来。设置监听器 通过setVisibility方法设置当前显示项 main.xml 找工作,上长沙英才网 /> public class Activity01 extends Activity{ private static final String[] string = { ”O型“, ”A型“, ”B型“, ”AB型“, ”其他“ }; private TextView m_TextView;private Spinner m_Spinner;private ArrayAdapter @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main); m_TextView =(TextView)findViewById(R.id.TextView1);m_Spinner =(Spinner)findViewById(R.id.Spinner1); //将可选内容与ArrayAdapter连接 adapter = new ArrayAdapter //设置下拉列表的风格 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //将adapter添加到m_Spinner中 m_Spinner.setAdapter(adapter); //添加Spinner事件监听 找工作,上长沙英才网 m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){--------------------------Spinner监听器 @Override public void onItemSelected(AdapterView> arg0, View arg1, int arg2, long arg3){ m_TextView.setText(”你的血型是:“ + string[arg2]);//设置显示当前选择的项 arg0.setVisibility(View.VISIBLE);} @Override public void onNothingSelected(AdapterView> arg0){ // TODO Auto-generated method stub });} } }---------RadioGroup , RadioButton 单选选择控件 一个单选选择由两部分组成,分别是前面的选择按钮和后面的内容。按钮通过RadioButton来实现,答案通过RadioGroup来实现 如果确定是选择哪一项那就要设置监听器setOnCheckedChangeListener.下面有一例子:本例中使用到了String.xml文件来定义常量。string.xml 找工作,上长沙英才网 main.xml 找工作,上长沙英才网 android:layout_width=”wrap_content“ android:layout_height=”wrap_content“ android:text=”@string/RadioButton1“ /> public class Activity01 extends Activity{ TextView m_TextView;RadioGroup m_RadioGroup;RadioButton m_Radio1, m_Radio2, m_Radio3, m_Radio4; @Override 找工作,上长沙英才网 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main); m_RadioGroup =(RadioGroup)findViewById(R.id.RadioGroup01);//获得RadioGroup对象 m_Radio1 =(RadioButton)findViewById(R.id.RadioButton1);//获得4个RadioButton对象 m_Radio2 =(RadioButton)findViewById(R.id.RadioButton2);m_Radio3 =(RadioButton)findViewById(R.id.RadioButton3);m_Radio4 =(RadioButton)findViewById(R.id.RadioButton4); /* 设置事件监听 */ m_RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){---------------------------RadioGroup监听器 @Override public void onCheckedChanged(RadioGroup group, int checkedId){ if(checkedId == m_Radio2.getId()){ DisplayToast(”正确答案:“ + m_Radio2.getText()+ ”,恭喜你,回答正确!“);}else{ DisplayToast(”请注意,回答错误!“);} } });} public void DisplayToast(String str)//显示Toast{ Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG);//设置toast显示的位置 找工作,上长沙英才网 toast.setGravity(Gravity.TOP, 0, 220);//显示该Toast toast.show();} }--------------AutoCompletTextView 和MultiAutoCompleteTextView 作用:自动提示 下面例中用到了ArrayAdapter autoCompletTextView.xml //如何实现如果输入的字符不在其范围内的也能得到提示 是继承TextWatcher? 找工作,上长沙英才网 public class Control_Auto extends Activity { //implements TextWatcher{} public TextView textView_auto; private static final String[] string ={”ni hao“,”ni hao “,”ni hao ma“,”ni zheng de hao ma“,”nshis“}; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.autocompletetextview); //将可选内容与适配器ArrayAdapter连接 ArrayAdapter MultiAutoCompleteTextView multiAutoCompletTextView =(MultiAutoCompleteTextView)findViewById(R.id.multiAutoCompleteTextView);AutoCompleteTextView autoCompleteTextView =(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView); autoCompleteTextView.setAdapter(adapter);//将adapter添加到AutoCompletTextView中去 multiAutoCompletTextView.setAdapter(adapter);//将adapter添加到MultAutoCompleteTextView中去 multiAutoCompletTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());} } 找工作,上长沙英才网 /* //autoCompleteTextView.addTextChangedListener(this);---此为设置监听? * 例子中没有涉及到的属性(可在布局文件中设置): AutoCompleteTextView是EditText的子类,所以你可以对它的对象进行诸如外观/字体/颜色等属性值的设置。 completionThreshold:它的值决定了你在AutoCompleteTextView至少输入几个字符,它才会具有自动提示的功能。另,默认最多提示20条。 dropDownAnchor:它的值是一个View的ID,指定后,AutoCompleteTextView会在这个View下弹出自动提示。 dropDownSelector:应该是设置自动提示的背景色之类的。 dropDownWidth:设置自动提示列表的宽度。 你可以通过setAdapter()来给AutoCompleteTextView添加一个包含候选值列表的适配器(adapter)。--------此处没实现过? 然而,由于用户可以输入一些不在候选值列表的数据,AutoCompleteTextView不支 持selection listener。不过,你可以注册一个TextWacther用于当用户输入文本发生变化时发出通知。 -------------------------DatePicker,TimePicker 日期和时间 下例中首先需要在布局文件中定义DatePicker和TimePicker,然后通过Canlendar类获得系统时间,接着通过init方法将日期传给DatePicker, 并设置OnDateChangedListener来监听日期改变,当时间被改变时需要设置setOnTimeChangedListener监听来设置时间。datepicker_timepicker.xml 找工作,上长沙英才网 > 找工作,上长沙英才网 public class Date_Time extends Activity{//如何实现日期随系统不断变化?要联网才能实现?如何变换DatePicker和TimePicker样式(如颜色,图片等)? Calendar calendar;TextView textView_date_time;Button button_date_time1;Button button_date_time2;DatePicker datePicker;TimePicker timePicker;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.datepicker_timepicker);calendar = Calendar.getInstance();//得到日历对象 textView_date_time =(TextView)findViewById(R.id.textView_date_time1);button_date_time1 =(Button)findViewById(R.id.button_date_time1);button_date_time2 =(Button)findViewById(R.id.button_date_time2);datePicker =(DatePicker)findViewById(R.id.datePicker);timePicker =(TimePicker)findViewById(R.id.timerPicker); button_date_time1.setWidth(50);button_date_time1.setHeight(60);button_date_time1.setTextColor(Color.BLUE); timePicker.setIs24HourView(true);//设置为24小时制 //将日历初始化为当前系统日期,并设置监听器 datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),-------------DatePicker监听器 找工作,上长沙英才网 calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener(){//OnDateChangedListener监听日期的变化 @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){ //设置日期 calendar.set(1987,10,15);} }); timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){------------TimePicker监听器 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute){ //设置时间 //calendar.set(1987,10,29,23,23,23);//年 月 日 小时 分钟 秒 textView_date_time.setText(”当前时间:“+hourOfDay+” : “+minute);} }); button_date_time1.setOnClickListener(new Button.OnClickListener(){//日期的监听---------------------------Button控件中设置DatePicker监听器 找工作,上长沙英才网 @Override public void onClick(View v){ new DatePickerDialog(Date_Time.this,new DatePickerDialog.OnDateSetListener(){ @Override public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth){ //设置日历 textView_date_time.setText(”农历“+year+” 年“+monthOfYear+” 月“+dayOfMonth+” 日“);} },calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();} }); button_date_time2.setOnClickListener(new Button.OnClickListener(){//时间的监听器----------------------------Button控件中设置TimePicker监听器 @Override public void onClick(View v){new TimePickerDialog(Date_Time.this, new TimePickerDialog.OnTimeSetListener(){ @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute){ //设置时间 找工作,上长沙英才网 textView_date_time.setText(”北京时间:“+hourOfDay+” : “+minute);} },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();}});} } ---------------Menu 操作应用程序的菜单选项 第一个例子:通过XML文件来实现 menu_com.xml
public class Menu_Xml extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.此为所以显示的界面id);} public boolean onCreateOptionsMenu(Menu menu){//创建menu MenuInflater inflater = getMenuInflater();//设置menu界面
inflater.inflate(R.layout.menu_com, menu);
找工作,上长沙英才网
return true;} public boolean onOptionsItemSelected(MenuItem item){//处理菜单事件 switch(item.getItemId()){ case R.id.about: Menu_Xml.this.finish();case R.id.skip: Intent intent = new Intent();intent.setClass(Menu_Xml.this, Menu_add.class);//跳转到Menu_add中去
startActivity(intent);Menu_Xml.this.finish();} return true;} } =============== 第二个例子:在代码中生成Menu 此例中包含俩个方法 注意区分注释掉的为另一种增加Menu的方法
public class Menu_add extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.toast);} public boolean onCreateOptionsMenu(Menu menu){//创立menu /*为Menu添加内容参数:Menu.add()方法第一个参数表示给这个新增的菜单项分配一个分组号;
* 第二个参数表示给这个新增的菜单项分配一个唯一标识id;第三个参数为菜单项的序号;
找工作,上长沙英才网
* 第四个参数为菜单项的标题。
我们可以通过调用Menu.setItemShown()或者Menu.setGroupShown()方法来显示或隐藏一些菜单项。
这里要注意的一个地方是:菜单项的显示顺序是按代码中添加的顺序来的,也就是说Menu.add()方法
只能在菜单的最后面新增一个菜单项。另外,第一个参数的分组标识,不会改变菜单项的显示顺序。
方法一:
//menu.add(0,0,0,R.string.menu1);方法一 //menu.add(0,1,1,R.string.menu2);方法二:
SubMenu subMenu = menu.addSubMenu(1, 1, 2, ”选项“);//此方法和menu方法类似
subMenu.add(13,13,13, ”到Content_Menu“);subMenu.add(13,24,24,”到Menu_Xml“);
return true;} public boolean onOptionsItemSelected(MenuItem item){//处理Menu事件 switch(item.getItemId()){//getItemId()得到菜单项的ID,即上面的第二个参数 case 13: Intent intent1 = new Intent();intent1.setClass(Menu_add.this, Context_Menu.class);startActivity(intent1);Menu_add.this.finish();case 23: Intent intent = new Intent();intent.setClass(Menu_add.this, Menu_Xml.class);//跳转到其他界面中去
找工作,上长沙英才网
startActivity(intent);Menu_add.this.finish();break;} return true;} } ============== 第三个例子:Context Menu的创建:
概述:Android 的上下文菜单类似于PC 上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以
注册上下文菜单,不过,最常见的是用于列表视图ListView的item。
注意:Android 的上下文菜单不支持图标或快捷键。
创建一个上下文菜单的步骤:
1.覆盖Activity 的onCreateContenxtMenu()方法,调用Menu 的add 方法添加菜单项(MenuItem)。
2.覆盖Activity 的onContextItemSelected()方法,响应上下文菜单菜单项的单击事件。
3.调用registerForContextMenu()方法,为视图注册上下文菜单。menu_com2.xml
找工作,上长沙英才网
public class Context_Menu extends Activity{ public TextView textView_context_Menu;public Button buttont_context_Menu;
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.menu_com2);textView_context_Menu =(TextView)findViewById(R.id.textView_context_Menu);buttont_context_Menu =(Button)findViewById(R.id.button_context_Menu);
registerForContextMenu(textView_context_Menu);registerForContextMenu(buttont_context_Menu);//这里的registerForContextMenu()也可以用下面的语句替代 //getContentView().setOnCreateContextMenuListener(this);}
找工作,上长沙英才网
//创建Context Menu public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){ if(v==textView_context_Menu){ menu.setHeaderTitle(”这个是什么?“);menu.add(0,0,0,”苹果“);menu.add(0,1,1,”猕猴桃“);}else if(v==buttont_context_Menu){ menu.setHeaderTitle(”我知道是什么了!“);menu.add(2,2,2,”不是苹果“);menu.add(2,3,3,”就是猕猴桃“);} super.onCreateContextMenu(menu, v, menuInfo);} //菜单单击响应 @Override public boolean onContextItemSelected(MenuItem item){ //获取当前被选择的菜单项的信息 switch(item.getItemId()){ case 1: Toast toast=Toast.makeText(Context_Menu.this, ”你点击了“+textView_context_Menu.getText(), Toast.LENGTH_LONG);toast.setGravity(Gravity.TOP, 100, 300);toast.show();break;case 3: Toast toast1=Toast.makeText(Context_Menu.this, ”你点击了“+buttont_context_Menu.getText(), Toast.LENGTH_LONG);toast1.setGravity(Gravity.TOP, 100, 300);toast1.show();break;
找工作,上长沙英才网
} return true;} } ============== 第四个例子:动态Menu 此为动态Menu的实现,采用的是代码布局(非XML布局)。此种Memu用在什么情况下,具体该怎么做?
public class Trends_Menu extends Activity{ LinearLayout linearLayout;TextView textView;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);linearLayout = new LinearLayout(this);linearLayout.setBackgroundColor(android.graphics.Color.BLUE);//设置背景色
linearLayout.setOrientation(linearLayout.VERTICAL);//设置布局方向
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);textView= new TextView(this);//创建TextView对象 textView.setBackgroundColor(Color.YELLOW);//设置背景颜色 textView.setText(”Trends_Men“);textView.setTextSize(50);//textView.setHeight(50);//textView.setWidth(100);textView.setTextColor(Color.RED);//设置字体颜色
找工作,上长沙英才网
linearLayout.addView(textView,params);//将textView添加到linearLayout中去
setContentView(linearLayout);//设置ui布局 } public boolean onPrepareOptionsMenu(Menu menu){ String string = textView.getText().toString();if(string.equals(”Trends_Menu“)){ menu.clear();//清掉菜单
MenuItem item = menu.add(0,1,1,”to Menu“);item.setIcon(android.R.drawable.alert_dark_frame);//android自带的图标 } if(string.equals(”Menu“)){ menu.clear();MenuItem item = menu.add(1,2,2,”to Trends_Menu“);item.setIcon(android.R.drawable.alert_light_frame);} menu.add(0,2,2,”Now is“+string);return super.onPrepareOptionsMenu(menu);} }
-------------ListView 一个用来显示列表的控件 xml设计
代码设计
第一个例子:
public class ListView3 extends ListActivity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
找工作,上长沙英才网
String[] string={”华中科技“,”天龙大厦“,”科技园“,”天天乐园“};//string 是用来要存放的数据
//android.R.layout.simple_expandable_list_item_1为XML的配置文件, 用来设置列表中每一行的窗口 setListAdapter(new ArrayAdapter
* 在配置文件中要注意的是android:list 是系统自定义的不是随便可以取的,否则会出现找不到ListView ==================== 第二个例子: textView_chrild.xml 找工作,上长沙英才网 android:layout_height=”fill_parent“ android:paddingLeft=”50px“ android:paddingTop=”5px“ android:paddingBottom=”5px“ android:text=”no date“ android:textSize=”30sp“ />
找工作,上长沙英才网
找工作,上长沙英才网
map1.put(”list1“, ”map1“);map2.put(”list1“, ”map2“);list1.add(map1);list1.add(map2);//定义一个List,该List对象为第一个一级条目 提供数据 List
//定义一个List,该List对象用来存储所有二级条目对象 List>> list0 = new ArrayList
>>();list0.add(list21);list0.add(list31);
SimpleExpandableListAdapter simple = new SimpleExpandableListAdapter(找工作,上长沙英才网
this,//context list1,//一级条目数据
R.layout.expandable_group,//用来设置一级条目样式的布局文件 new String[]{”list1“}, //指定一级条目数据的Key new int[]{R.id.textView_group},//指定一级条目数据显示的控件id list0, //二级条目数据
R.layout.expandable_chrild,//用来设置二级条目样式的布局文件 new String[]{”list“}, //指定二级条目数据的Key new int[]{R.id.textView_chrild});//指定二级条目数据显示的控件id
setListAdapter(simple);//将SimpleExpandableListAdapter对象设置给当前的Activity } } ============================= 第三个例子:自定义ListView public class ImageTextView extends LinearLayout{ public TextView textView;public ImageView imageView;
public ImageTextView(Context context, String string,Drawable drawable){----* 注意这里并没用在xml定义控件
super(context);// TODO Auto-generated constructor stub this.setOrientation(VERTICAL);//设置为水平布局 imageView = new ImageView(context);imageView.setImageDrawable(drawable);imageView.setPadding(2, 5, 5, 0);//设置位置
addView(imageView,new LinearLayout.LayoutParams(40,30));
找工作,上长沙英才网
textView = new TextView(context);textView.setText(”title“);textView.setTextSize(20);addView(textView,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,30));
textView = new TextView(context);textView.setText(”title“);textView.setTextSize(20);addView(textView,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,30));} * 这是一个线性布局的View,其中包含一个TextView 和一个ImageView.* 且为垂直布局 }-----------------------public class ListCombinAdapter extends BaseAdapter{------------继承BaseAdapter 且必须重写五个函数 private Context wcontext;private List
public ListCombinAdapter(Context context){ this.wcontext=context;list = new ArrayList
找工作,上长沙英才网
} @Override public Object getItem(int position){ return list.get(position);//得到对象在List数组中的位置 } @Override public long getItemId(int position){ return(long)position;} public long getPosition(Object item){ return list.indexOf(item);//得到对象在list中的索引 } @Override public View getView(int position, View convertView, ViewGroup parent){//得到一个显示在屏幕上的View ImageTextView imageTextView;if(convertView == null){//判断原来的View是否存在 如果不存在利用ImageTextView创建一个View imageTextView = new ImageTextView(wcontext,(String)list.get(position).textView.getText(),list.get(position).imageView.getDrawable());}else{ imageTextView =(ImageTextView)convertView;//强制转型 imageTextView.textView = list.get(position).textView;imageTextView.imageView = list.get(position).imageView;} return imageTextView;} public void addItem(String text,Drawable drawable){ list.add(new ImageTextView(wcontext,text,drawable));//将创建好的ImageTextView对象加入到list中去
找工作,上长沙英才网
} }----------------------public class ListView4Activity extends ListActivity {//定制自己的adapter @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//setContentView(R.layout.main);//不需要此项
ListCombinAdapter listCombinAdapter = new ListCombinAdapter(this);listCombinAdapter.addItem(”不知道此处的字符串起什么作用“,getResources().getDrawable(R.drawable.image2));listCombinAdapter.addItem(”不知道此处的字符串起什么作用“, getResources().getDrawable(R.drawable.image3));setListAdapter(listCombinAdapter);} } ===================== 第四个例子: simpleadapter2.xml 找工作,上长沙英才网 android:orientation=”horizontal“> 找工作,上长沙英才网 android:gravity=”right“ android:textSize=”10pt“ />
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);ArrayList
第四篇:GridControl控件小结
由于近期要使用gridcontrol控件,整理出来,以便以后参考:
1.DevExpress控件组中的GridControl控件不能使横向滚动条有效。现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容。
解决:
gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了。
2.使单元格不可编辑。
gridcontrol-->gridview-->OptionsBehavior-->Editable=false
3.没有下拉滚动条事件怎么办?现象:因为需要加载大数据量数据,所以不能一次把所有数据读入datatable进行绑定,所以决定在用户进一步浏览数据时进行数据的实时加载工作,就是每当用户拉动滚动条时,多加载一些数据进入datatable.没有找到合适的滚动条事件,于是用这个事件代替了,非常合适我的需求.TopRowChanged事件.4.获取选定行,指定列单元格的内容
private string GetSelectOID()
{
int[] pRows = this.gridView1.GetSelectedRows();
if(pRows.GetLength(0)> 0)
return gridView1.GetRowCellValue(pRows[0], mOIDFiledName).ToString();
else
return null;
}
//mOIDFiledName为要获取列的列名
5.去除“Drag a Column Header Here To Group by that Column”
属性Gridview->Option View->Show Group Panel=false,就好了
6.在gridcontrol中添加checkbox复选框
gridview->run designer->columns->选择要变成复选框的那一列->column edit->new(在这里可以选择很多类型)
加载checkbox数据时,费了一点时间,checkbox的复选框怎么点击,一失去焦点是,选择的操作就无效了,问题就出在datatable的绑定上了,一定要绑定一个布尔的类型.代码是这样滴!
private void FrmCreateLegend_Load(object sender, EventArgs e)
{
IFeatureLayer pFeatureLayer;
IDataset pDataset;
string pName;
DataTable pDatatable = new DataTable();
pDatatable.Columns.Add(“图层名称”, System.Type.GetType(“System.String”));pDatatable.Columns.Add(“选择”, System.Type.GetType(“System.Boolean”));
DataRow pDataRow;
object[] rowArray = new object[2];
for(int i = 0;i < mFeatureLayers.Count;i++)
{
pDataRow = pDatatable.NewRow();
pFeatureLayer = mFeatureLayers[i] as IFeatureLayer;
rowArray[0] = pFeatureLayer.Name;
rowArray[1] = false;
pDataRow.ItemArray = rowArray;
pDatatable.Rows.Add(pDataRow);
}
this.gridMark.DataSource = pDatatable;
this.gridMark.Refresh();
}
注意:创建的datatable的列名一定要和gridview中的列的fieldname属性值是一个名字,不然,你会发现添加了和你绑定的datatalbe一样多的行,可是行里面却没有内容的.7.多选
GridControl->GridView->属性->OptinosSelecttion->MultiSelect
8.不显示子表信息
当我们对DataTable建立父子关系后,将父表绑定在Grid上,会造成关系列上有加号显示,并且可以展开.如果你觉得展开的信息对你没有意义的话,是可以关掉的.这是需要修改属性 属性Gridview->Option View->ShowDetailButtons=false
bandedGridView1.Columns[1].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[1])+ 5;
bandedGridView1.Columns[2].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[2])+ 5;
bandedGridView1.Columns[3].Width =
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[3])+ 5;
bandedGridView1.Columns[0].Width
bandedGridView1.CalcColumnBestWidth(bandedGridView1.Columns[0])+ 5;=
第五篇:Web测试中,各类web控件测试点总结(推荐)
Web测试中,各类web控件测试点总结
一、界面检查
进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验
1、页面名称title是否正确
2、当前位置是否可见您的位置:xxx>xxxx3、文字格式统一性
4、排版是否整齐
5、列表项显示字段是否齐全,列表项字段名称是否跟表单统一
6、同一页面,是否出现 字段名称相同、值取不同的问题。
7、数据加载情况:除了文本框的值,还要注意:
复选框,是否保存打√,或者保存不打√
下拉框,是否保存选择的值
多文本框,值是否都被保存,空格,换行是否保存
二、单文本框(type=text)
边界:字段长度
判空:是否可以为空
唯一性:是否唯一(小归结:边界、判空、唯一性、特殊字符、正确性)
考虑语言,操作环境
特殊符号测试输入:
' or 1<>'1' or '1'='1' or '1'<>'2"|?><
where a='xxx'下划线是否允许输入全部空格输入 单引号>>
特殊字段输入限定:
框内容是否合法(tel,ip,url,email)序号等,直接限制输入数字,其他过滤掉
输入金额文本框,整数首位为0,过滤掉,小数点后面,一般保留两个有效数字。
正确性测试:(必不可少的步骤)
1)、(字段长度输入最大允许长度时)数据允许长度的测试:a、页面是否被挤出的测试(都输入长英文字符串,是否断行);b、数据库是否允许最大字符(都输入汉字、都输入英文、混合„„);c、最短长度的正确流程,最大长度的正确流程覆盖。
2)、对于允许为空的字段,不填入,再次数据传递后,看是否报500错误。
3)、未规定字段长度(或者数值大小),不按死板输入,输入非常多字符(或者非常大的数值)时,做允许动作的正确性校验,看是否报错。(要达到的结果:不管有没有长度限制(没有给最长、最大限制让你去测?),最终页面不能抛数据库异常。)monkey test
说明:通过不断输入长字符串,看是否有长度校验;最终都会出现以下两种情况的一种:
A、页面(前台)有校验长度、大小;或者
B、无校验,数据库报错。
所以: 所有字段都要做长度、大小限制(不管需求有没有给出明确要求,不管测试颗粒度,都要限制长度,不允许报数据库错误,都要测!!)。最大长度限制可限定方法:
1、不允许再输入;
2、自动截断处理,并且给用户提示
关于长度概念:
1、数据库规定的字节长度A2、页面上可以输入的字符数B
控制方法:
1)、页面上,不管输入什么字符(全角如汉字、半角如字母),统一规定不能超过B个字符,此种限制,测试点:全部输入全角B个,测试(B*3字节)会不会超过数据库字节长度全部输入半角B个,测试(B*1字节)会不会超过数据库字节长度混合输入全角X半角Y,测试(X*3+Y字节)会不会超过数据库长度
2)、页面上,不以字符统计,以总的输入字节数统计,比如,全部输入全角字符,允许可以输入A/3个字符,全部输入半角字符,允许输入A个字符(民生网的设计)
测试点:全部输入全角,看是否允许输入A/3个字符
全部输入半角,看是否允许输入A个字符
混合输入全角X,半角Y,看是否允许X*3+Y=A
(5个:判空、唯
一、边界值、特殊字符、正确流程(多种数据、多种分支))+测试校验位置:ajax鼠标事件校验、前台提交按钮js校验,服务器拿到数据后再次验证
三、多文本框(type=textarea)
1)、空格和换行的问题,看需求,是否需要做支持HTML Encoding输入全部空格时,是否判空处理?””空格。
输入折行,是否也显示折行?
比如:列点说明原因,就需要支持。
2)、字母截断的问题
对于一串字母,开发人员往往会忘掉做截断,这样如果展示在我们的平台上的话,这一串字母就会把我们的UI撑开
3)、长度控制格式,您还可以输入***个字符
四、添加按钮
添加动作检查范围:
失败:是否提示
提示内容是否正确
失败时:保存用户已输入的内容,避免重新再输入
成功:对话框消失
记录是否可直接查看(还需要刷新?)
列表记录顺序
重复提交情况,点击一次后,是否变成disable
上传附件的添加:
A.文件名称:文件名称很长;文件名称字符多样化(汉字,英文,符号);文件名称重复。
B.判空?
C.附件格式类型支持?
D.附件个数?
E.附件空间大小。
五、移除按钮
1.一般都要在前台先给出一个提示操作“确定移除该„„”
2.相关联的东西,是否需要限制移除“该类型下存在应用,无法移除”有到后台比较
3.确定后,真正执行移除操作。
结果:
移除后,列表数据是否立即消失。
必须有确认删除的提示信息
六、列表
1)、列表记录顺序
2)、是否需要翻页、有没有翻页功能
3)、字段名称是否与表单一致
七、搜索-文本框
1、功能点、需求点考虑:
是否提供模糊查询、输入数值有种类有限定时,是否考虑换成下拉框搜索;
2、检查点:
文本框值是否消失(是否回填条件值),再次点击“查询”可查看所有记录;考虑搜索结果:是否存在分页,分页是否正常;是否有序;
注意:分页是否仍保存查询条件,检查后面的记录是否符合条件
3、查询数据多样性:
输入不存在的字段值测试、包括特殊字符查询测试例如:' or '1'='1;输入类似程序语句的条件时是否执行查询,如:XXXX”、XXX and ;
4、操作类型:
1)不输入的查询
2)输入全部空格的查询
3)模糊查询(输入部分字段,或者说,输入英文字母,查询到相关中文数据)
4)输入不存在的查询
5)输入存在的查询
6)单个查询和多个条件复合查询。
八、搜索-下拉框
检查点:
a)搜索结果是否有序;
b)下拉框值是否齐全;(下拉框值本身也是一个动态查询的结果)
c)下拉框值是否自动消失,再次点击“查询”可查看所有记录(是否要回填条件值);
d)分页时,是否保存搜索条件。
(从UI、开发、业务逻辑、用户使用等角度测试)
PS:
以上总结的,是比较纯粹的从页面控件角度测试点出发,对于完整测试一个整体页面,需要各类测试有机结合起来:
1)UI测试:
页面布局; 页面样式检查;控件长度是否够长;显示时,是否会被截断;支持的快捷键,Tab键切换焦点顺序正确性等。
2)功能测试:页面上各类控件的测试范围,测试点,可参考上方
结合控件的实际作用来补充检查点: 比如,密码框是否*显示,输入是否做trim处理等
3)安全测试:输入特殊字符,sql注入,脚本注入测试
后台验证测试,对于较重要的表单,绕过js检验后台是否验证
数据传输是否加密处理,比如,直接请求转发,地址栏直接显示发送字符串?
数据库存储,特别密码等,是否加密形式存储
4)兼容性测试
5)性能测试