第一篇:iOS UITextField控件總結(jié)
iOS UITextField控件總結(jié)
//初始化textfield并設(shè)置位置及大小
UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];
//設(shè)置邊框樣式,只有設(shè)置了才會顯示邊框樣式
text.borderStyle = UITextBorderStyleRoundedRect;typedef enum {
UITextBorderStyleNone,UITextBorderStyleLine,UITextBorderStyleBezel,UITextBorderStyleRoundedRect
} UITextBorderStyle;
//設(shè)置輸入框的背景顏色,此時設(shè)置為白色 如果使用了自定義的背景圖片邊框會被忽略掉
text.backgroundColor = [UIColor whiteColor];
//設(shè)置背景
text.background = [UIImage imageNamed:@“dd.png”];
//設(shè)置背景
text.disabledBackground = [UIImage imageNamed:@“cc.png”];
//當輸入框沒有內(nèi)容時,水印提示 提示內(nèi)容為password text.placeholder = @“password”;
//設(shè)置輸入框內(nèi)容的字體樣式和大小
text.font = [UIFont fontWithName:@“Arial” size:20.0f];
//設(shè)置字體顏色
text.textColor = [UIColor redColor];
//輸入框中是否有個叉號,在什么時候顯示,用于一次性刪除輸入框中的內(nèi)容
text.clearButtonMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever, 從不出現(xiàn)
UITextFieldViewModeWhileEditing, 編輯時出現(xiàn)
UITextFieldViewModeUnlessEditing, 除了編輯外都出現(xiàn)
UITextFieldViewModeAlways 一直出現(xiàn) } UITextFieldViewMode;
//輸入框中一開始就有的文字
text.text = @“一開始就在輸入框的文字”;
//每輸入一個字符就變成點 用語密碼輸入
text.secureTextEntry = YES;
//是否糾錯
text.autocorrectionType = UITextAutocorrectionTypeNo;
typedef enum {
UITextAutocorrectionTypeDefault, 默認
UITextAutocorrectionTypeNo, 不自動糾錯
UITextAutocorrectionTypeYes, 自動糾錯 } UITextAutocorrectionType;
//再次編輯就清空
text.clearsOnBeginEditing = YES;
//內(nèi)容對齊方式
text.textAlignment = UITextAlignmentLeft;
//內(nèi)容的垂直對齊方式 UITextField繼承自UIControl,此類中有一個屬性contentVerticalAlignment text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
//設(shè)置為YES時文本會自動縮小以適應(yīng)文本窗口大小.默認是保持原來大小,而讓長文本滾動
textFied.adjustsFontSizeToFitWidth = YES;
//設(shè)置自動縮小顯示的最小字體大小
text.minimumFontSize = 20;
//設(shè)置鍵盤的樣式
text.keyboardType = UIKeyboardTypeNumberPad;
typedef enum {
UIKeyboardTypeDefault,默認鍵盤,支持所有字符
UIKeyboardTypeASCIICapable, 支持ASCII的默認鍵盤
UIKeyboardTypeNumbersAndPunctuation, 標準電話鍵盤,支持+*#字符
UIKeyboardTypeURL,URL鍵盤,支持.com按鈕 只支持URL字符 UIKeyboardTypeNumberPad,數(shù)字鍵盤 UIKeyboardTypePhonePad,電話鍵盤
UIKeyboardTypeNamePhonePad, 電話鍵盤,也支持輸入人名 UIKeyboardTypeEmailAddress, 用于輸入電子 郵件地址的鍵盤
UIKeyboardTypeDecimalPad,數(shù)字鍵盤 有數(shù)字和小數(shù)點
UIKeyboardTypeTwitter,優(yōu)化的鍵盤,方便輸入@、#字符
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;
//設(shè)置代理 用于實現(xiàn)協(xié)議
text.delegate = self;
//把textfield加到視圖中
[self.window addSubview:text];//最右側(cè)加圖片是以下代碼
左側(cè)類似
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協(xié)議
text.delegate = self;聲明text的代理是我,我會去實現(xiàn)把鍵盤往下收的方法 這個方法在UITextFieldDelegate里所以我們要采用UITextFieldDelegate這個協(xié)議
-(BOOL)textFieldShouldReturn:(UITextField *)textField { [text resignFirstResponder];//主要是[receiver resignFirstResponder]在哪調(diào)用就能把receiver對應(yīng)的鍵盤往下收 return YES;}
重寫繪制行為
除了UITextField對象的風(fēng)格選項,你還可以定制化UITextField對象,為他添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結(jié)構(gòu),制定了文本字段每個部件的邊界范圍。以下方法都可以重寫。
– textRectForBounds:
//重寫來重置文字區(qū)域
– drawTextInRect:
//改變繪文字屬性.重寫時調(diào)用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數(shù),就不用調(diào)用super了.– placeholderRectForBounds: //重寫來重置占位符區(qū)域
– drawPlaceholderInRect: //重寫改變繪制占位符屬性.重寫時調(diào)用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數(shù),就不用調(diào)用super了.– borderRectForBounds: //重寫來重置邊緣區(qū)域 – editingRectForBounds: //重寫來重置編輯區(qū)域
– clearButtonRectForBounds: //重寫來重置clearButton位置,改變size可能導(dǎo)致button的圖片失真 – leftViewRectForBounds: – rightViewRectForBounds: 委托方法
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一個BOOL值,指定是否循序文本字段開始編輯
return YES;}
-(void)textFieldDidBeginEditing:(UITextField *)textField{ //開始編輯時觸發(fā),文本字段將成為first responder }
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//返回BOOL值,指定是否允許文本字段結(jié)束編輯,當編輯結(jié)束,文本字段會讓出first responder
//要想在用戶結(jié)束編輯時阻止文本字段消失,可以返回NO
//這對一些文本字段必須始終保持活躍狀態(tài)的程序很有用,比如即時消息
return NO;}
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調(diào)用這個方法。
//這對于想要加入撤銷選項的應(yīng)用程序特別有用
//可以跟蹤字段內(nèi)所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。
//要防止文字被改變可以返回NO
//這個方法的參數(shù)中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中
return YES;}
-(BOOL)textFieldShouldClear:(UITextField *)textField{
//返回一個BOOL值指明是否允許根據(jù)用戶請求清除內(nèi)容
//可以設(shè)置在特定條件下才允許清除內(nèi)容
return YES;}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//返回一個BOOL值,指明是否允許在按下回車鍵時結(jié)束編輯
//如果允許要調(diào)用resignFirstResponder 方法,這回導(dǎo)致結(jié)束編輯,而鍵盤會被收起[textField resignFirstResponder];//查一下resign這個單詞的意思就明白這個方法了
return YES;}
通知
UITextField派生自UIControl,所以UIControl類中的通知系統(tǒng)在文本字段中也可以使用。除了UIControl類的標準事件,你還可以使用下列UITextField類特有的事件
UITextFieldTextDidBeginEditingNotification UITextFieldTextDidChangeNotification UITextFieldTextDidEndEditingNotification 當文本字段退出編輯模式時觸發(fā)。通知的object屬性存儲了最終文本。因為文本字段要使用鍵盤輸入文字,所以下面這些事件發(fā)生時,也會發(fā)送動作通知
UIKeyboardWillShowNotification //鍵盤顯示之前發(fā)送 UIKeyboardDidShowNotification //鍵盤顯示之后發(fā)送 UIKeyboardWillHideNotification //鍵盤隱藏之前發(fā)送 UIKeyboardDidHideNotification //鍵盤隱藏之后發(fā)送
1、Text :設(shè)置文本框的默認文本。
2、Placeholder : 可以在文本框中顯示灰色的字,用于提示用戶應(yīng)該在這個文本框輸入什么內(nèi)容。當這個文本框中輸入了數(shù)據(jù)時,用于提示的灰色的字將會自動消失。
3、Background :
4、Disabled : 若選中此項,用戶將不能更改文本框內(nèi)容。
5、接下來是三個按鈕,用來設(shè)置對齊方式。
6、Border Style : 選擇邊界風(fēng)格。
7、Clear Button : 這是一個下拉菜單,你可以選擇清除按鈕什么時候出現(xiàn),所謂清除按鈕就是出一個現(xiàn)在文本框右邊的小 X,你可以有以下選擇:
7.1 Never appears : 從不出現(xiàn)
7.2 Appears while editing : 編輯時出現(xiàn)
7.3 Appears unless editing :
7.4 Is always visible : 總是可見
8、Clear when editing begins : 若選中此項,則當開始編輯這個文本框時,文本框中之前的內(nèi)容會被清除掉。比如,你現(xiàn)在這個文本框 A 中輸入了 “What”,之后去編輯文本框 B,若再回來編輯文本框 A,則其中的 “What” 會被立即清除。
9、Text Color : 設(shè)置文本框中文本的顏色。
10、Font : 設(shè)置文本的字體與字號。
11、Min Font Size : 設(shè)置文本框可以顯示的最小字體(不過我感覺沒什么用)
12、Adjust To Fit : 指定當文本框尺寸減小時,文本框中的文本是否也要縮小。選擇它,可以使得全部文本都可見,即使文本很長。但是這個選項要跟 Min Font Size 配合使用,文本再縮小,也不會小于設(shè)定的 Min Font Size。接下來的部分用于設(shè)置鍵盤如何顯示。
13、Captitalization : 設(shè)置大寫。下拉菜單中有四個選項:
13.1 None : 不設(shè)置大寫
13.2 Words : 每個單詞首字母大寫,這里的單詞指的是以空格分開的字符串
13.3 Sentances : 每個句子的第一個字母大寫,這里的句子是以句號加空格分開的字符串
13.4 All Characters : 所以字母大寫
14、Correction : 檢查拼寫,默認是 YES。
15、Keyboard : 選擇鍵盤類型,比如全數(shù)字、字母和數(shù)字等。
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分離出數(shù)組,數(shù)組按@”“分離出字符串
BOOL canChange = [string isEqualToString:filtered];
return canChange;}
上面那個NUMBERS是一個宏,可以在文件頂部定義:
#define NUMBERS @”0123456789n”(這個代表可以輸入數(shù)字和換行,請注意這個n,如果不寫這個,Done按鍵將不會觸發(fā),如果用在SearchBar中,將會不觸發(fā)Search事件,因為你自己限制不讓輸入n,好慘,我在項目中才發(fā)現(xiàn)的。)所以,如果你要限制輸入英文和數(shù)字的話,就可以把這個定義為: #define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。當然,你還可以在以上方法return之前,做一提示的,比如提示用戶只能輸入數(shù)字之類的。如果你覺得有需要的話。
限制只能輸入一定長度的字符
-(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];//得到輸入框的內(nèi)容
if(self.myTextField == textField)//判斷是否時我們想要限定的那個輸入框
{
if([toBeString length] > 20){ //如果輸入框內(nèi)容大于20則彈出警告
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@”超過最大字數(shù)不能輸入了“ delegate:nil cancelButtonTitle:@”O(jiān)k" otherButtonTitles:nil, nil] autorelease];
[alert show];
return NO;
}
}
return YES;}
第二篇:dxp控件總結(jié)
From 屬性:
1.MaximizeBox:是否顯示最小化按鈕。2.MinimizeBox:是否顯示最大化按鈕。
3.FormBorderStyle:窗口樣式,如FixedSingle:固定大小。4.StartPosition:初始顯示的位置,CenterScreen:中心。
事件:
TreeList: 屬性:
1.隱藏列頭:設(shè)置OptionsView中的ShowColumns改為false 2.隱藏每行最左邊的指示箭頭:設(shè)置OptionsView中的ShowIndicator改為false 3.隱藏父節(jié)點的指示箭頭:設(shè)置OptionsView中的ShowRoot改為false 4.selectImageList:給TreeList綁定imageCollection 5.OptionsView.ShowVertLines:是否顯示網(wǎng)格線(豎直的)6.OptionsView.ShowHorzLines:是否顯示網(wǎng)格線(水平的)
7.OptionsSelection.EnableAppearanceFocusedCell:選中單元格,是否改變該單元格外觀(選中后該單元格有邊線或不顯示邊線)
8.OptionsSelection.EnableAppearanceFocusedRow:選中行。是否改變該行的外觀(選中后該行底色是否變化)
9.OptionsView.ShowCheckBoxes:是否在每一行前顯示勾選框。
事件:
1.FocusedNodeChanged:焦點改變后觸發(fā)
2.treeList_Enter:第一次點擊是觸發(fā),初始化控件時候,焦點會在第一行,此時就觸發(fā)。3.CustomNodeCellEdit:鼠標選中某個Cell時觸發(fā),可以實現(xiàn)動態(tài)的設(shè)定Cell綁定的控件類型 4.MouseDoubleClick:雙擊節(jié)點觸發(fā)
5.FocusedColumnChanged:選中列改變時觸發(fā),即前后點擊的列不一樣時觸發(fā)(即使前后選中列不在一行,只要選中列改變就會觸發(fā),與行無關(guān)。若前后選中列中某列的ReadOnly = ture則不會觸發(fā)該事件)
6.MouseDoubleClick:鼠標雙擊節(jié)點時觸發(fā)。7.MouseUp:鼠標點擊節(jié)點彈起時觸發(fā)。(e.Button可以得到曾按下的是哪個按鈕)8.SelectImageClick:點擊SelectImage觸發(fā) 9.StateImageClick:點擊StateImage觸發(fā) 10.BeforeExpand:節(jié)點展開之前 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.表示這一列不可編輯(無法實現(xiàn)復(fù)制):OptionsColumn中的AllowEdit = False 4.FieldName: 5.UnboundType:
6.SortOrder:列表中的項排序,SortOrder =Descending,遞減排序。SortOrder = Ascending,遞增排序。
treeList.AppendNode();//添加節(jié)點(TreeListNode)
TreeListNode:(TreeList中的節(jié)點)
屬性: 1.ImageIndex:正常情況下節(jié)點前面顯示的圖片的索引
2.SelectImageIndex:選中節(jié)點時節(jié)點前邊顯示的圖片的索引
3.StateImageIndex:節(jié)點開頭顯示的圖片索引(在SelectImageIndex之后)4.Level:節(jié)點的級別(0:根節(jié)點、1:一級節(jié)點···)imageCollection 屬性:
1.Images:在imageCollection中添加圖片
ImageComboBoxEdit ComboBoxEdit 屬性:
1.調(diào)整下拉菜單直觀顯示出來的行數(shù)(即不用滾動條就可以看的到的行數(shù)):DropDownRows 2.Properties.Items:綁定數(shù)據(jù)源
3.Properties.TextEditStyle:Standard(可輸入,可選),HideTextEditor(只能通過下拉菜單選擇,選中后不在界面上顯示),DisableTextEditor(只能通過下拉菜單選擇并且選中后在界面上顯示)
4.ToolTip:
5.SelectedIndex:選擇的Item的索引(get,set)
事件:
1:EditValueChanged:只要是值改變就會觸發(fā) 2:SelectedIndexChanged:(值改變觸發(fā))SelectedIndex改變觸發(fā)。3:SelectedValueChanged:(值改變觸發(fā))SelectedValue改變觸發(fā)。
4:DrawItem:光標在下拉菜單上移動的時候觸發(fā),即光標在選擇項上來回移動時觸發(fā)
ComboBox(win)
屬性:
1.DroppedDown:設(shè)置/獲取下拉菜單是否展開。
2.SelectionStart:設(shè)置光標的位置(輸入文本時用,設(shè)置為Text.Length可以保證光標在最后一個字符的后面,避免將前邊的字符覆蓋掉)。事件:
1.TextUpdate:輸入的值時(text屬性值改變時)觸發(fā)。(在TextChanged事件之前)2.TextChanged:輸入的值時(text屬性值改變時)觸發(fā)。(在TextUpdate事件之后)3.MouseDown:鼠標在控件上按下時觸發(fā)。
LabelControl:
屬性: 事件:
notePane:
屬性:
1.MaxRow:設(shè)置notePane最大顯示行數(shù)
TextEdit:單行文本輸入
事件:
1.EditValueChanged:TextEdit值改變時候觸發(fā)
2.Validating:焦點離開TextEdit時觸發(fā),驗證有效性(有效性的標準通過自己在事件里面的代碼來寫,若設(shè)置了EditMask,進入該事件會先自動根據(jù)EditMask為標準來驗證有效性,完成之后執(zhí)行事件里面的代碼)3.KeyPress:鍵盤按下某一個鍵觸發(fā)。
屬性:
1.TextEdit.Mask.EditMask:可以規(guī)定輸入的格式,類似正則表達式
2.TextEdit.Mask.MaskType:指定可填寫的文本類型(如:數(shù)字、字符串或者是根據(jù)正則表達式(RegEx)來約束···EditMask與MaskType配合使用,若MaskType= RegEx,EditMas = 某正則表達式,當MaskType是DateTime,Numeric時,EditMask為指定的相應(yīng)類型)3.MaxLength:可填的最大字符長度,僅當MaskType = None時有效
4.TextEdit.Mask.BeepOnError:當用戶輸入不滿足EdiMask要求時,是否發(fā)beep聲。5.UseSystemPasswordChar: true –密碼框(輸入的內(nèi)容在界面上是 ****)6.實現(xiàn)水印文字:Properties.NullValuePrompt = “輸入密碼”
Properties.NullValuePromptShowForEmptyValue = true;
memoEdit:多行文本輸入
屬性: 事件:
checkEdit:
屬性:
1.Checked:是否選中
事件:
1.CheckedChanged:勾選狀態(tài)改變時觸發(fā)(選中變不選中,不選中變選中)
checkedListBoxControl:(實現(xiàn)多選框)
屬性: 事件:
1.DrawItem:光標在選擇菜單上移動的時候觸發(fā),即光標在選擇項上來回移動時觸發(fā)(與ComboBoxEdit的DrawItem事件相似)2.ItemCheck:勾選或取消勾選Item時觸發(fā)。(e.Index:點擊的Item的索引,e.State:改變的狀態(tài))3.方法: 1.UnCheckAll();//全部不選 2.CheckAll();//全選中
PopupContainerEdit:
屬性:
1. Properties.PopupControl:(PopupContainerEdit和PopupContainerControl組合,實現(xiàn)下拉組合框)this.popupContainerEdit1.Properties.PopupControl = this.popupContainerControl1;
事件:
1.EditValueChanged 2.QueryResultValue PopupContainerControl:
屬性: 事件:
splitContainerControl: barManager: popupMenu:
lookUpEdit:
屬性:
1.Properties.DataSource:綁定數(shù)據(jù)(可以直接將list<>賦值給它)。
2.Properties.TextEditStyle:Standard(可輸入),HideTextEditor(只能通過下拉菜單選擇,選中后不在界面上顯示),DisableTextEditor(只能通過下拉菜單選擇并且選中后在界面上顯示)3.事件:
panelControl:
屬性:
1.BorderStyle(邊框風(fēng)格):NoBorder–無邊框,事件:
wizardControl:
屬性:
1.HeaderImage:右上角圖片。2.CancelText:3.FinishText:4.NextText:5.PreviousText:
當在最后一頁時中間按鈕變?yōu)椤敖Y(jié)束”
事件:
1.CancelClick:點擊“取消”觸發(fā)。2.FinishClick:最后一頁點擊結(jié)束觸發(fā)。3.SelectedPageChanging:切換頁面時觸發(fā)。(e.Direction:判斷是向前翻頁還是向后翻頁,e.Page:新頁)
4.SelectedPageChanged:切換頁面后觸發(fā)。(e.PrevPage:舊頁)
wizardPage:(wizardControl中的每一頁)
屬性:
1. DescriptionText:2. Text:
事件:
1.PageValidating:驗證事件。(e.Direction:判斷是向前翻頁還是向后翻頁,e.Valid = false;翻不過去)2.simpleButton:
屬性:
1.事件: buttonEdit:
屬性: 事件:
dropDownButton: 屬性:
1.DropDownControl:(dropDownButton控件實現(xiàn)下拉框)
增加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:布局風(fēng)格
OptionsView.AutoScaleBands:當LayoutStyle為SingleRecordViewBandsView,設(shè)置該屬性為true,列寬自動填充 6.XtraTabControl 屬性:
1.ClosePageButtonShowMode:如何顯示每個tabPage上的關(guān)閉按鈕。
如:InActiveTabPageHeader:當TabPage為當前選中時顯示關(guān)閉按鈕。2.HeaderLocation:標簽位置(上下左右)3.ShowTabHeader:是否顯示標簽
4.HeaderOrientation:標簽方向(Horizontal:水平,Vertical豎直)5.HeaderButtons:當tabpage過多,需要翻頁時,設(shè)置翻頁按鈕如何組合。如
6.TabPageWidth:統(tǒng)設(shè)標簽寬度。
事件:
1.CloseButtonClick:點擊標簽上的X按鈕事件
XtraTabPage:
屬性:
1.ShowCloseButton:是否顯示關(guān)閉按鈕。2.TabPageWidth:這一頁的標簽寬度。
第三篇:手機Android系統(tǒng)常用控件總結(jié)
找工作,上長沙英才網(wǎng)
手機Android系統(tǒng)常用控件總結(jié)
Notepad++編寫 可以負責(zé)粘貼到其中去 看得更清楚。(內(nèi)容包括了Android中的大部分常用控件及其事件的監(jiān)聽)第一章
1.1 Android中src文件夾包含項目的所有包及其資源文件,res文件夾包含了項目中所有的資源。比如:程序圖標(drawable),布局文件(layout),常量(value),音頻文件(raw)R.java是在創(chuàng)建項目是自動生成的只讀文件,不可更改此文件。R文件其作用:是定義項目中所有資源的索引文件。
1.2 AndroidManfest.xml 如下:
package=“Android.Summary” //引用程序包名 android:versionCode=“1” android:versionName=“1.0”> 找工作,上長沙英才網(wǎng)
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如下:
找工作,上長沙英才網(wǎng)
android:orientation=“vertical” //版面配置的方式。此為自上到下為垂直配置,“horizontal”為水平配置 android:layout_width=“fill_parent” //定義當前視圖在屏幕上所占的寬度,“fill_parent”為填充整個屏幕寬度 /*android:layout_weight=“50”*/ //用于給一個布局中多個視圖的重要度賦值 android:layout_height=“fill_parent” //定義當前視圖在屏幕上所占的高度,...........................高度 > android:text=“@string/hello” //在視圖上顯示的內(nèi)容,此處引用了@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
找工作,上長沙英才網(wǎng)
public void onCreate(Bundle savedInstanceState){ //重寫onCreate()方法
super.onCreate(savedInstanceState);setContentView(R.layout.main);//設(shè)置要顯示的布局 } } 第二章
2.1 Android應(yīng)用程序由四個模塊組成:Activity,Service,Intent,ContentProvider(注意:一個應(yīng)用程序不一定包含全部的四個模塊).在使用時必須在AandroidManfest中進行聲明。
Activity可以理解為用戶看到屏幕,主要用于處理應(yīng)用程序的整體性工作。如: a.監(jiān)聽系統(tǒng)事件,觸屏事件,為用戶顯示指定的View,啟動其他Activity等。b.所有應(yīng)用的Activity都繼承于android.app.Activity,該類是Android提供的基層類。
c.一個Activity通常就是一個單獨的屏幕。d.每一個活動都被實現(xiàn)為一個獨立的類。e.大多數(shù)的應(yīng)用程序都是由多個Activity組成。
Intent Aandroid中主要用Intent類實現(xiàn)從一個Activity跳轉(zhuǎn)到另一個Activity。在Intent的描述結(jié)構(gòu)中,有兩個重要的部分:動作和對應(yīng)的數(shù)據(jù)。
典型的動作有MAIN,VIEW,PICK,EDIT.而動作對應(yīng)的數(shù)據(jù)則以URI的形式表示。例如:要查一個人的聯(lián)系方式,需要創(chuàng)建一個動作類型View的Intent ,以及一個表示這個人的URI.Intent的使用:
button1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ Intent intent = new Intent();//創(chuàng)建一個Intent對象
intent.setClass(Activity01.this,Activity02.class);//指明要啟動的另一Activity02 startActivity(intent);//啟動一個新的Activity
找工作,上長沙英才網(wǎng)
Activity01.this.finish();//關(guān)閉當前Activity01 } });這里需要注意在Android中對新啟動的Activity進行聲明。聲明方式:
IntentReceiver 如果希望Android應(yīng)用能夠?qū)ν獠渴录ㄈ珉娫挻蛉霑r,數(shù)據(jù)網(wǎng)絡(luò)可用時,)做出響應(yīng),可用使用IntentReceiver.雖然IntentReceiver在如上事件發(fā)生
時會使用NotificationManager通知用戶,但它并不能生產(chǎn)UI。IntentReceiver可以在AndroidManifest.xml中注冊,也可在代碼中使用Context.registerReceiver 進行注冊。當IntentReceiver被觸發(fā)時,系統(tǒng)會在需要的時候啟動應(yīng)用。各種應(yīng)用還可以通過ContentReceiver()將他們自己的IntentReceiver廣播出去。???????
Content Provider 作用:主要用于不同應(yīng)用程序中的數(shù)據(jù)的傳遞。Content Provider 是一個特殊的存儲數(shù)據(jù)的類型。Android自身提供現(xiàn)成的Content Provider:Contacts ,Browser,CallLog,Settings,MediaStore 應(yīng)用可用通過唯一的ContentResolver界面來使用具體的Conten Provider,然后可以用ContentResolver提供的方法來使用你需要的Content Provider 其中,ContentResolver提供的方法有query(),insert(),update()等。URI----String形式的Content Provider的完整路徑。
下面這個這個例子通過ContentProvider獲取電話本中的數(shù)據(jù),然后顯示到TextView中去。
public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){
找工作,上長沙英才網(wǎng)
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()){ //取得聯(lián)系人名字
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);//設(shè)置TextView顯示的內(nèi)容
setContentView(textView);//顯示到屏幕上 其實TextView也是View的一種 } } 注意:在使用這些模塊中用到了讀取聯(lián)系人的API,所以必須在AndroidManifest.xml中聲明
聲明方式為:
找工作,上長沙英才網(wǎng)
Service 后臺服務(wù),沒有界面
啟動service方法: a.Context.startService()b.Context.bindService()//與上一種方法不同處 如果這個Service沒有處于啟動狀態(tài),則將其啟動
下面這個例子以Activity中的倆個控件來控制播放一首Mp3.(例中:需要在res文件夾中創(chuàng)建一個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);//設(shè)置按鈕(Button)監(jiān)聽
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“));} };//停止按鈕
找工作,上長沙英才網(wǎng)
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文件中
找工作,上長沙英才網(wǎng)
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“);
找工作,上長沙英才網(wǎng)
} public void onDestroy(){ super.onDestroy();Log.v(TAG, ”onDestroy“);} public void onRestart(){ super.onRestart();Log.v(TAG, ”onReStart“);} } 這些方法都是系統(tǒng)自動調(diào)用的。
第三章 3.1 事件處理
* 控件事件通過設(shè)置其控件的監(jiān)聽器來監(jiān)聽并處理事件 * 按鍵按下事件:通過重寫onKeyDown方法 * 按鍵彈起事件:通過重寫onKeyUp方法 * 觸筆點擊事件:通過實現(xiàn)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);
找工作,上長沙英才網(wǎng)
button_ok.setOnClickListener(new Button.OnClickListener(){------------------------//設(shè)置Button控件監(jiān)聽器
public void onClick(View v){ //這里處理事件
DisplayToast(”點擊了OK按鈕“);} });}
/* 按鍵按下所觸發(fā)的事件*/ 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);}
找工作,上長沙英才網(wǎng)
/* 按鍵彈起所觸發(fā)的事件*/ 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);} //用于響應(yīng)按鍵重復(fù)點擊,官方API指出onKeyMultiple方法總是返回false,即它沒有handle,因此必須重寫才能實現(xiàn)-------------------此方法沒用過具體情況怎么樣不是很清楚?
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event){
return super.onKeyMultiple(keyCode, repeatCount, event);}
/* 觸筆事件*/
找工作,上長沙英才網(wǎng)
public boolean onTouchEvent(MotionEvent event){ int iAction = event.getAction();//利用getAction得到所執(zhí)行的動作 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();//將獲得的坐標轉(zhuǎn)成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();} } 我們分析了一些常用事件處理方式。每一個鍵都對應(yīng)一個鍵值。當然也可根據(jù)需要來改變一些鍵的功能,需要我們自己構(gòu)建KeyEvent對象------------------有待進一步學(xué)習(xí)
構(gòu)造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);
找工作,上長沙英才網(wǎng)
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){ //這里構(gòu)建KeyEvent對象,其功能為返回鍵的功能 //因此我們按任意鍵都會執(zhí)行返回鍵功能
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
//這里傳入的參數(shù)就是我們自己構(gòu)建的KeyEvent對象key return super.onKeyDown(key.getKeyCode(), key);} } 3.2 常用控件 Button xml設(shè)計
代碼設(shè)計Button button = new Button(this);
找工作,上長沙英才網(wǎng)
button.setText(”我是Button“);button.setWidth(123);//設(shè)置寬度 button.setHeight(123);//設(shè)置高度
button.setTextColor(Color.BLUE);//設(shè)置文字顏色 button.setTextSize(123);//設(shè)置字體大小
button.setBackgroundColor(Color.BLUE);//設(shè)置控件背景色
監(jiān)聽器
button.setOnClickListener(new Button.OnClickListener(){//設(shè)置按鈕的事件監(jiān)聽
public void onClick(View v){ //處理按鈕事件產(chǎn)生一個Toast.利用button.getText()得到按鈕顯示的內(nèi)容
Toast toast = Toast.makeText(Activity01.this, ”你點擊了““+button.getText()+””按鈕!“, Toast.LENGTH_LONG);//設(shè)置toast顯示的位置
toast.setGravity(Gravity.TOP, 0, 150);//顯示該Toast toast.show();} });-TextView 一個用來顯示文本的控件 xml設(shè)計 找工作,上長沙英才網(wǎng) 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“ //用于設(shè)置View中內(nèi)容相對于View組件的對齊方式,android:layout_gravity//用于設(shè)置View組件相對于Container的對齊方式。 android:paddingLeft=”30px“ // 按鈕上設(shè)置的內(nèi)容離按鈕左邊邊界30個像素 android:layout_marginLeft=”30px“ //整個按鈕離左邊設(shè)置的內(nèi)容30個像素 android:layout_weight=”1“//控件權(quán)重 即占的比例 默認值為0 android:gravity=”center_horizontal“//水平居中 android:padding=”3dip“ 代碼設(shè)計TextView textView = new TextView(this);//聲明對象 textView.setTextColor(Color.RED);//設(shè)置字體顏色 textView.setTextSize(20);//設(shè)置字體大小 textView.setBackgroundColor(Color.BLUE);//控件背景色 textView.setText(”你好“)//顯示的文字 textView.setHeight textView.setWidth textView.setVisibility(GONE/VISIBLE);//設(shè)置為不可見/可見 textView.setGravity(Gravity.CENTER);//設(shè)置文字權(quán)重 找工作,上長沙英才網(wǎng) 監(jiān)聽器TextView textView = new TextView(this);//得到對象 textview.setOnClickListener(new TextView.OnClickListener(){------------TextView監(jiān)聽器 public void onClick(View v){ } });---ImageButton 帶圖標的按鈕 xml設(shè)計 代碼中設(shè)計 imageButton.setImageDrawable(getResources().getDrawable(R.drawable.image2));//在代碼中設(shè)計使用的圖片(得到對象后) 監(jiān)聽器 imageButton.setOnClickListener(new Button.OnClickListener(){--------------ImageButton監(jiān)聽器 @Override public void onClick(View v){ //創(chuàng)建對話框 Dialog dialog = new AlertDialog.Builder(ImageButton_Dialog.this) 找工作,上長沙英才網(wǎng) .setTitle(”ImageButton2“).setMessage(”跳轉(zhuǎn)到系統(tǒng)圖片“).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設(shè)計 代碼設(shè)計EditText editText = new EditText(this);//得到EditText對象 editText.setTextSize(20);//設(shè)置字體大小 找工作,上長沙英才網(wǎng) editText.setHint(”請輸入賬號“);//設(shè)置當m_EditText中為空時提示的內(nèi)容 監(jiān)聽器 editText.setOnKeyListener(new EditText.OnKeyListener(){----------EditText監(jiān)聽器 @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2){ // 得到文字,將其顯示到TextView中 m_TextView.setText(”文本框中內(nèi)容是:“ + m_EditText.getText().toString());return false;} });--------------------CheckBox 多項選擇 需要對沒有按鈕設(shè)置監(jiān)聽器 xml設(shè)計 checkBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){//對每個選項設(shè)置事件監(jiān)聽-------------------CheckBox監(jiān)聽器 @Override 找工作,上長沙英才網(wǎng) public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ if(m_CheckBox1.isChecked()){ DisplayToast(”你選擇了:“+m_CheckBox1.getText());} } });----------------------Spinner 下拉列表 下面一個例子將可選內(nèi)容通過ArrayAdapter和下拉列表連接起來。設(shè)置監(jiān)聽器 通過setVisibility方法設(shè)置當前顯示項 main.xml 找工作,上長沙英才網(wǎng) /> public class Activity01 extends Activity{ private static final String[] string = { ”O(jiān)型“, ”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); //將可選內(nèi)容與ArrayAdapter連接 adapter = new ArrayAdapter //設(shè)置下拉列表的風(fēng)格 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //將adapter添加到m_Spinner中 m_Spinner.setAdapter(adapter); //添加Spinner事件監(jiān)聽 找工作,上長沙英才網(wǎng) m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){--------------------------Spinner監(jiān)聽器 @Override public void onItemSelected(AdapterView> arg0, View arg1, int arg2, long arg3){ m_TextView.setText(”你的血型是:“ + string[arg2]);//設(shè)置顯示當前選擇的項 arg0.setVisibility(View.VISIBLE);} @Override public void onNothingSelected(AdapterView> arg0){ // TODO Auto-generated method stub });} } }---------RadioGroup , RadioButton 單選選擇控件 一個單選選擇由兩部分組成,分別是前面的選擇按鈕和后面的內(nèi)容。按鈕通過RadioButton來實現(xiàn),答案通過RadioGroup來實現(xiàn) 如果確定是選擇哪一項那就要設(shè)置監(jiān)聽器setOnCheckedChangeListener.下面有一例子:本例中使用到了String.xml文件來定義常量。string.xml 找工作,上長沙英才網(wǎng) main.xml 找工作,上長沙英才網(wǎng) 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 找工作,上長沙英才網(wǎng) 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); /* 設(shè)置事件監(jiān)聽 */ m_RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){---------------------------RadioGroup監(jiān)聽器 @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);//設(shè)置toast顯示的位置 找工作,上長沙英才網(wǎng) toast.setGravity(Gravity.TOP, 0, 220);//顯示該Toast toast.show();} }--------------AutoCompletTextView 和MultiAutoCompleteTextView 作用:自動提示 下面例中用到了ArrayAdapter autoCompletTextView.xml //如何實現(xiàn)如果輸入的字符不在其范圍內(nèi)的也能得到提示 是繼承TextWatcher? 找工作,上長沙英才網(wǎng) 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); //將可選內(nèi)容與適配器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());} } 找工作,上長沙英才網(wǎng) /* //autoCompleteTextView.addTextChangedListener(this);---此為設(shè)置監(jiān)聽? * 例子中沒有涉及到的屬性(可在布局文件中設(shè)置): AutoCompleteTextView是EditText的子類,所以你可以對它的對象進行諸如外觀/字體/顏色等屬性值的設(shè)置。 completionThreshold:它的值決定了你在AutoCompleteTextView至少輸入幾個字符,它才會具有自動提示的功能。另,默認最多提示20條。 dropDownAnchor:它的值是一個View的ID,指定后,AutoCompleteTextView會在這個View下彈出自動提示。 dropDownSelector:應(yīng)該是設(shè)置自動提示的背景色之類的。 dropDownWidth:設(shè)置自動提示列表的寬度。 你可以通過setAdapter()來給AutoCompleteTextView添加一個包含候選值列表的適配器(adapter)。--------此處沒實現(xiàn)過? 然而,由于用戶可以輸入一些不在候選值列表的數(shù)據(jù),AutoCompleteTextView不支 持selection listener。不過,你可以注冊一個TextWacther用于當用戶輸入文本發(fā)生變化時發(fā)出通知。 -------------------------DatePicker,TimePicker 日期和時間 下例中首先需要在布局文件中定義DatePicker和TimePicker,然后通過Canlendar類獲得系統(tǒng)時間,接著通過init方法將日期傳給DatePicker, 并設(shè)置OnDateChangedListener來監(jiān)聽日期改變,當時間被改變時需要設(shè)置setOnTimeChangedListener監(jiān)聽來設(shè)置時間。datepicker_timepicker.xml 找工作,上長沙英才網(wǎng) > 找工作,上長沙英才網(wǎng) public class Date_Time extends Activity{//如何實現(xiàn)日期隨系統(tǒng)不斷變化?要聯(lián)網(wǎng)才能實現(xiàn)?如何變換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);//設(shè)置為24小時制 //將日歷初始化為當前系統(tǒng)日期,并設(shè)置監(jiān)聽器 datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),-------------DatePicker監(jiān)聽器 找工作,上長沙英才網(wǎng) calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener(){//OnDateChangedListener監(jiān)聽日期的變化 @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){ //設(shè)置日期 calendar.set(1987,10,15);} }); timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){------------TimePicker監(jiān)聽器 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute){ //設(shè)置時間 //calendar.set(1987,10,29,23,23,23);//年 月 日 小時 分鐘 秒 textView_date_time.setText(”當前時間:“+hourOfDay+” : “+minute);} }); button_date_time1.setOnClickListener(new Button.OnClickListener(){//日期的監(jiān)聽---------------------------Button控件中設(shè)置DatePicker監(jiān)聽器 找工作,上長沙英才網(wǎng) @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){ //設(shè)置日歷 textView_date_time.setText(”農(nóng)歷“+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(){//時間的監(jiān)聽器----------------------------Button控件中設(shè)置TimePicker監(jiān)聽器 @Override public void onClick(View v){new TimePickerDialog(Date_Time.this, new TimePickerDialog.OnTimeSetListener(){ @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute){ //設(shè)置時間 找工作,上長沙英才網(wǎng) textView_date_time.setText(”北京時間:“+hourOfDay+” : “+minute);} },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();}});} } ---------------Menu 操作應(yīng)用程序的菜單選項 第一個例子:通過XML文件來實現(xiàn) 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){//創(chuàng)建menu MenuInflater inflater = getMenuInflater();//設(shè)置menu界面
inflater.inflate(R.layout.menu_com, menu);
找工作,上長沙英才網(wǎng)
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);//跳轉(zhuǎn)到Menu_add中去
startActivity(intent);Menu_Xml.this.finish();} return true;} } =============== 第二個例子:在代碼中生成Menu 此例中包含倆個方法 注意區(qū)分注釋掉的為另一種增加Menu的方法
public class Menu_add extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.toast);} public boolean onCreateOptionsMenu(Menu menu){//創(chuàng)立menu /*為Menu添加內(nèi)容參數(shù):Menu.add()方法第一個參數(shù)表示給這個新增的菜單項分配一個分組號;
* 第二個參數(shù)表示給這個新增的菜單項分配一個唯一標識id;第三個參數(shù)為菜單項的序號;
找工作,上長沙英才網(wǎng)
* 第四個參數(shù)為菜單項的標題。
我們可以通過調(diào)用Menu.setItemShown()或者Menu.setGroupShown()方法來顯示或隱藏一些菜單項。
這里要注意的一個地方是:菜單項的顯示順序是按代碼中添加的順序來的,也就是說Menu.add()方法
只能在菜單的最后面新增一個菜單項。另外,第一個參數(shù)的分組標識,不會改變菜單項的顯示順序。
方法一:
//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,即上面的第二個參數(shù) 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);//跳轉(zhuǎn)到其他界面中去
找工作,上長沙英才網(wǎng)
startActivity(intent);Menu_add.this.finish();break;} return true;} } ============== 第三個例子:Context Menu的創(chuàng)建:
概述:Android 的上下文菜單類似于PC 上的右鍵菜單。當為一個視圖注冊了上下文菜單之后,長按(2 秒左右)這個視圖對象就會彈出一個浮動菜單,即上下文菜單。任何視圖都可以
注冊上下文菜單,不過,最常見的是用于列表視圖ListView的item。
注意:Android 的上下文菜單不支持圖標或快捷鍵。
創(chuàng)建一個上下文菜單的步驟:
1.覆蓋Activity 的onCreateContenxtMenu()方法,調(diào)用Menu 的add 方法添加菜單項(MenuItem)。
2.覆蓋Activity 的onContextItemSelected()方法,響應(yīng)上下文菜單菜單項的單擊事件。
3.調(diào)用registerForContextMenu()方法,為視圖注冊上下文菜單。menu_com2.xml
找工作,上長沙英才網(wǎng)
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);}
找工作,上長沙英才網(wǎng)
//創(chuàng)建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);} //菜單單擊響應(yīng) @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;
找工作,上長沙英才網(wǎng)
} return true;} } ============== 第四個例子:動態(tài)Menu 此為動態(tài)Menu的實現(xiàn),采用的是代碼布局(非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);//設(shè)置背景色
linearLayout.setOrientation(linearLayout.VERTICAL);//設(shè)置布局方向
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);textView= new TextView(this);//創(chuàng)建TextView對象 textView.setBackgroundColor(Color.YELLOW);//設(shè)置背景顏色 textView.setText(”Trends_Men“);textView.setTextSize(50);//textView.setHeight(50);//textView.setWidth(100);textView.setTextColor(Color.RED);//設(shè)置字體顏色
找工作,上長沙英才網(wǎng)
linearLayout.addView(textView,params);//將textView添加到linearLayout中去
setContentView(linearLayout);//設(shè)置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設(shè)計
代碼設(shè)計
第一個例子:
public class ListView3 extends ListActivity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
找工作,上長沙英才網(wǎng)
String[] string={”華中科技“,”天龍大廈“,”科技園“,”天天樂園“};//string 是用來要存放的數(shù)據(jù)
//android.R.layout.simple_expandable_list_item_1為XML的配置文件, 用來設(shè)置列表中每一行的窗口 setListAdapter(new ArrayAdapter
* 在配置文件中要注意的是android:list 是系統(tǒng)自定義的不是隨便可以取的,否則會出現(xiàn)找不到ListView ==================== 第二個例子: textView_chrild.xml 找工作,上長沙英才網(wǎng) android:layout_height=”fill_parent“ android:paddingLeft=”50px“ android:paddingTop=”5px“ android:paddingBottom=”5px“ android:text=”no date“ android:textSize=”30sp“ />
找工作,上長沙英才網(wǎng)
找工作,上長沙英才網(wǎng)
map1.put(”list1“, ”map1“);map2.put(”list1“, ”map2“);list1.add(map1);list1.add(map2);//定義一個List,該List對象為第一個一級條目 提供數(shù)據(jù) List
//定義一個List,該List對象用來存儲所有二級條目對象 List>> list0 = new ArrayList
>>();list0.add(list21);list0.add(list31);
SimpleExpandableListAdapter simple = new SimpleExpandableListAdapter(找工作,上長沙英才網(wǎng)
this,//context list1,//一級條目數(shù)據(jù)
R.layout.expandable_group,//用來設(shè)置一級條目樣式的布局文件 new String[]{”list1“}, //指定一級條目數(shù)據(jù)的Key new int[]{R.id.textView_group},//指定一級條目數(shù)據(jù)顯示的控件id list0, //二級條目數(shù)據(jù)
R.layout.expandable_chrild,//用來設(shè)置二級條目樣式的布局文件 new String[]{”list“}, //指定二級條目數(shù)據(jù)的Key new int[]{R.id.textView_chrild});//指定二級條目數(shù)據(jù)顯示的控件id
setListAdapter(simple);//將SimpleExpandableListAdapter對象設(shè)置給當前的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);//設(shè)置為水平布局 imageView = new ImageView(context);imageView.setImageDrawable(drawable);imageView.setPadding(2, 5, 5, 0);//設(shè)置位置
addView(imageView,new LinearLayout.LayoutParams(40,30));
找工作,上長沙英才網(wǎng)
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 且必須重寫五個函數(shù) private Context wcontext;private List
public ListCombinAdapter(Context context){ this.wcontext=context;list = new ArrayList
找工作,上長沙英才網(wǎng)
} @Override public Object getItem(int position){ return list.get(position);//得到對象在List數(shù)組中的位置 } @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創(chuàng)建一個View imageTextView = new ImageTextView(wcontext,(String)list.get(position).textView.getText(),list.get(position).imageView.getDrawable());}else{ imageTextView =(ImageTextView)convertView;//強制轉(zhuǎn)型 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));//將創(chuàng)建好的ImageTextView對象加入到list中去
找工作,上長沙英才網(wǎng)
} }----------------------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 找工作,上長沙英才網(wǎng) android:orientation=”horizontal“> 找工作,上長沙英才網(wǎng) android:gravity=”right“ android:textSize=”10pt“ />
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);ArrayList
第四篇:GridControl控件小結(jié)
由于近期要使用gridcontrol控件,整理出來,以便以后參考:
1.DevExpress控件組中的GridControl控件不能使橫向滾動條有效?,F(xiàn)象:控件中的好多列都擠在一起,列寬都變的很小,根本無法正常瀏覽控件單元格中的內(nèi)容。
解決:
gridView1.OptionsView.ColumnAutoWidth屬性是true,即各列的寬度自動調(diào)整,你把它設(shè)成false,就會出現(xiàn)了。
2.使單元格不可編輯。
gridcontrol-->gridview-->OptionsBehavior-->Editable=false
3.沒有下拉滾動條事件怎么辦?現(xiàn)象:因為需要加載大數(shù)據(jù)量數(shù)據(jù),所以不能一次把所有數(shù)據(jù)讀入datatable進行綁定,所以決定在用戶進一步瀏覽數(shù)據(jù)時進行數(shù)據(jù)的實時加載工作,就是每當用戶拉動滾動條時,多加載一些數(shù)據(jù)進入datatable.沒有找到合適的滾動條事件,于是用這個事件代替了,非常合適我的需求.TopRowChanged事件.4.獲取選定行,指定列單元格的內(nèi)容
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復(fù)選框
gridview->run designer->columns->選擇要變成復(fù)選框的那一列->column edit->new(在這里可以選擇很多類型)
加載checkbox數(shù)據(jù)時,費了一點時間,checkbox的復(fù)選框怎么點擊,一失去焦點是,選擇的操作就無效了,問題就出在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();
}
注意:創(chuàng)建的datatable的列名一定要和gridview中的列的fieldname屬性值是一個名字,不然,你會發(fā)現(xiàn)添加了和你綁定的datatalbe一樣多的行,可是行里面卻沒有內(nèi)容的.7.多選
GridControl->GridView->屬性->OptinosSelecttion->MultiSelect
8.不顯示子表信息
當我們對DataTable建立父子關(guān)系后,將父表綁定在Grid上,會造成關(guān)系列上有加號顯示,并且可以展開.如果你覺得展開的信息對你沒有意義的話,是可以關(guān)掉的.這是需要修改屬性 屬性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控件測試點總結(jié)(推薦)
Web測試中,各類web控件測試點總結(jié)
一、界面檢查
進入一個頁面測試,首先是檢查title,頁面排版,字段等,而不是馬上進入文本框校驗
1、頁面名稱title是否正確
2、當前位置是否可見您的位置:xxx>xxxx3、文字格式統(tǒng)一性
4、排版是否整齊
5、列表項顯示字段是否齊全,列表項字段名稱是否跟表單統(tǒng)一
6、同一頁面,是否出現(xiàn) 字段名稱相同、值取不同的問題。
7、數(shù)據(jù)加載情況:除了文本框的值,還要注意:
復(fù)選框,是否保存打√,或者保存不打√
下拉框,是否保存選擇的值
多文本框,值是否都被保存,空格,換行是否保存
二、單文本框(type=text)
邊界:字段長度
判空:是否可以為空
唯一性:是否唯一(小歸結(jié):邊界、判空、唯一性、特殊字符、正確性)
考慮語言,操作環(huán)境
特殊符號測試輸入:
' or 1<>'1' or '1'='1' or '1'<>'2"|?><
where a='xxx'下劃線是否允許輸入全部空格輸入 單引號>>
特殊字段輸入限定:
框內(nèi)容是否合法(tel,ip,url,email)序號等,直接限制輸入數(shù)字,其他過濾掉
輸入金額文本框,整數(shù)首位為0,過濾掉,小數(shù)點后面,一般保留兩個有效數(shù)字。
正確性測試:(必不可少的步驟)
1)、(字段長度輸入最大允許長度時)數(shù)據(jù)允許長度的測試:a、頁面是否被擠出的測試(都輸入長英文字符串,是否斷行);b、數(shù)據(jù)庫是否允許最大字符(都輸入漢字、都輸入英文、混合??);c、最短長度的正確流程,最大長度的正確流程覆蓋。
2)、對于允許為空的字段,不填入,再次數(shù)據(jù)傳遞后,看是否報500錯誤。
3)、未規(guī)定字段長度(或者數(shù)值大?。?,不按死板輸入,輸入非常多字符(或者非常大的數(shù)值)時,做允許動作的正確性校驗,看是否報錯。(要達到的結(jié)果:不管有沒有長度限制(沒有給最長、最大限制讓你去測?),最終頁面不能拋數(shù)據(jù)庫異常。)monkey test
說明:通過不斷輸入長字符串,看是否有長度校驗;最終都會出現(xiàn)以下兩種情況的一種:
A、頁面(前臺)有校驗長度、大??;或者
B、無校驗,數(shù)據(jù)庫報錯。
所以: 所有字段都要做長度、大小限制(不管需求有沒有給出明確要求,不管測試顆粒度,都要限制長度,不允許報數(shù)據(jù)庫錯誤,都要測??!)。最大長度限制可限定方法:
1、不允許再輸入;
2、自動截斷處理,并且給用戶提示
關(guān)于長度概念:
1、數(shù)據(jù)庫規(guī)定的字節(jié)長度A2、頁面上可以輸入的字符數(shù)B
控制方法:
1)、頁面上,不管輸入什么字符(全角如漢字、半角如字母),統(tǒng)一規(guī)定不能超過B個字符,此種限制,測試點:全部輸入全角B個,測試(B*3字節(jié))會不會超過數(shù)據(jù)庫字節(jié)長度全部輸入半角B個,測試(B*1字節(jié))會不會超過數(shù)據(jù)庫字節(jié)長度混合輸入全角X半角Y,測試(X*3+Y字節(jié))會不會超過數(shù)據(jù)庫長度
2)、頁面上,不以字符統(tǒng)計,以總的輸入字節(jié)數(shù)統(tǒng)計,比如,全部輸入全角字符,允許可以輸入A/3個字符,全部輸入半角字符,允許輸入A個字符(民生網(wǎng)的設(shè)計)
測試點:全部輸入全角,看是否允許輸入A/3個字符
全部輸入半角,看是否允許輸入A個字符
混合輸入全角X,半角Y,看是否允許X*3+Y=A
(5個:判空、唯
一、邊界值、特殊字符、正確流程(多種數(shù)據(jù)、多種分支))+測試校驗位置:ajax鼠標事件校驗、前臺提交按鈕js校驗,服務(wù)器拿到數(shù)據(jù)后再次驗證
三、多文本框(type=textarea)
1)、空格和換行的問題,看需求,是否需要做支持HTML Encoding輸入全部空格時,是否判空處理?””空格。
輸入折行,是否也顯示折行?
比如:列點說明原因,就需要支持。
2)、字母截斷的問題
對于一串字母,開發(fā)人員往往會忘掉做截斷,這樣如果展示在我們的平臺上的話,這一串字母就會把我們的UI撐開
3)、長度控制格式,您還可以輸入***個字符
四、添加按鈕
添加動作檢查范圍:
失?。菏欠裉崾?/p>
提示內(nèi)容是否正確
失敗時:保存用戶已輸入的內(nèi)容,避免重新再輸入
成功:對話框消失
記錄是否可直接查看(還需要刷新?)
列表記錄順序
重復(fù)提交情況,點擊一次后,是否變成disable
上傳附件的添加:
A.文件名稱:文件名稱很長;文件名稱字符多樣化(漢字,英文,符號);文件名稱重復(fù)。
B.判空?
C.附件格式類型支持?
D.附件個數(shù)?
E.附件空間大小。
五、移除按鈕
1.一般都要在前臺先給出一個提示操作“確定移除該??”
2.相關(guān)聯(lián)的東西,是否需要限制移除“該類型下存在應(yīng)用,無法移除”有到后臺比較
3.確定后,真正執(zhí)行移除操作。
結(jié)果:
移除后,列表數(shù)據(jù)是否立即消失。
必須有確認刪除的提示信息
六、列表
1)、列表記錄順序
2)、是否需要翻頁、有沒有翻頁功能
3)、字段名稱是否與表單一致
七、搜索-文本框
1、功能點、需求點考慮:
是否提供模糊查詢、輸入數(shù)值有種類有限定時,是否考慮換成下拉框搜索;
2、檢查點:
文本框值是否消失(是否回填條件值),再次點擊“查詢”可查看所有記錄;考慮搜索結(jié)果:是否存在分頁,分頁是否正常;是否有序;
注意:分頁是否仍保存查詢條件,檢查后面的記錄是否符合條件
3、查詢數(shù)據(jù)多樣性:
輸入不存在的字段值測試、包括特殊字符查詢測試例如:' or '1'='1;輸入類似程序語句的條件時是否執(zhí)行查詢,如:XXXX”、XXX and ;
4、操作類型:
1)不輸入的查詢
2)輸入全部空格的查詢
3)模糊查詢(輸入部分字段,或者說,輸入英文字母,查詢到相關(guān)中文數(shù)據(jù))
4)輸入不存在的查詢
5)輸入存在的查詢
6)單個查詢和多個條件復(fù)合查詢。
八、搜索-下拉框
檢查點:
a)搜索結(jié)果是否有序;
b)下拉框值是否齊全;(下拉框值本身也是一個動態(tài)查詢的結(jié)果)
c)下拉框值是否自動消失,再次點擊“查詢”可查看所有記錄(是否要回填條件值);
d)分頁時,是否保存搜索條件。
(從UI、開發(fā)、業(yè)務(wù)邏輯、用戶使用等角度測試)
PS:
以上總結(jié)的,是比較純粹的從頁面控件角度測試點出發(fā),對于完整測試一個整體頁面,需要各類測試有機結(jié)合起來:
1)UI測試:
頁面布局; 頁面樣式檢查;控件長度是否夠長;顯示時,是否會被截斷;支持的快捷鍵,Tab鍵切換焦點順序正確性等。
2)功能測試:頁面上各類控件的測試范圍,測試點,可參考上方
結(jié)合控件的實際作用來補充檢查點: 比如,密碼框是否*顯示,輸入是否做trim處理等
3)安全測試:輸入特殊字符,sql注入,腳本注入測試
后臺驗證測試,對于較重要的表單,繞過js檢驗后臺是否驗證
數(shù)據(jù)傳輸是否加密處理,比如,直接請求轉(zhuǎn)發(fā),地址欄直接顯示發(fā)送字符串?
數(shù)據(jù)庫存儲,特別密碼等,是否加密形式存儲
4)兼容性測試
5)性能測試