第一篇: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é)點(diǎn)的指示箭頭:設(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:焦點(diǎn)改變后觸發(fā)
2.treeList_Enter:第一次點(diǎn)擊是觸發(fā),初始化控件時(shí)候,焦點(diǎn)會在第一行,此時(shí)就觸發(fā)。3.CustomNodeCellEdit:鼠標(biāo)選中某個(gè)Cell時(shí)觸發(fā),可以實(shí)現(xiàn)動態(tài)的設(shè)定Cell綁定的控件類型 4.MouseDoubleClick:雙擊節(jié)點(diǎn)觸發(fā)
5.FocusedColumnChanged:選中列改變時(shí)觸發(fā),即前后點(diǎn)擊的列不一樣時(shí)觸發(fā)(即使前后選中列不在一行,只要選中列改變就會觸發(fā),與行無關(guān)。若前后選中列中某列的ReadOnly = ture則不會觸發(fā)該事件)
6.MouseDoubleClick:鼠標(biāo)雙擊節(jié)點(diǎn)時(shí)觸發(fā)。7.MouseUp:鼠標(biāo)點(diǎn)擊節(jié)點(diǎn)彈起時(shí)觸發(fā)。(e.Button可以得到曾按下的是哪個(gè)按鈕)8.SelectImageClick:點(diǎn)擊SelectImage觸發(fā) 9.StateImageClick:點(diǎn)擊StateImage觸發(fā) 10.BeforeExpand:節(jié)點(diǎn)展開之前 11.BeforeFocusNode:焦點(diǎn)選中之前
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.表示這一列不可編輯(無法實(shí)現(xiàn)復(fù)制):OptionsColumn中的AllowEdit = False 4.FieldName: 5.UnboundType:
6.SortOrder:列表中的項(xiàng)排序,SortOrder =Descending,遞減排序。SortOrder = Ascending,遞增排序。
treeList.AppendNode();//添加節(jié)點(diǎn)(TreeListNode)
TreeListNode:(TreeList中的節(jié)點(diǎn))
屬性: 1.ImageIndex:正常情況下節(jié)點(diǎn)前面顯示的圖片的索引
2.SelectImageIndex:選中節(jié)點(diǎn)時(shí)節(jié)點(diǎn)前邊顯示的圖片的索引
3.StateImageIndex:節(jié)點(diǎn)開頭顯示的圖片索引(在SelectImageIndex之后)4.Level:節(jié)點(diǎn)的級別(0:根節(jié)點(diǎn)、1:一級節(jié)點(diǎn)···)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:光標(biāo)在下拉菜單上移動的時(shí)候觸發(fā),即光標(biāo)在選擇項(xiàng)上來回移動時(shí)觸發(fā)
ComboBox(win)
屬性:
1.DroppedDown:設(shè)置/獲取下拉菜單是否展開。
2.SelectionStart:設(shè)置光標(biāo)的位置(輸入文本時(shí)用,設(shè)置為Text.Length可以保證光標(biāo)在最后一個(gè)字符的后面,避免將前邊的字符覆蓋掉)。事件:
1.TextUpdate:輸入的值時(shí)(text屬性值改變時(shí))觸發(fā)。(在TextChanged事件之前)2.TextChanged:輸入的值時(shí)(text屬性值改變時(shí))觸發(fā)。(在TextUpdate事件之后)3.MouseDown:鼠標(biāo)在控件上按下時(shí)觸發(fā)。
LabelControl:
屬性: 事件:
notePane:
屬性:
1.MaxRow:設(shè)置notePane最大顯示行數(shù)
TextEdit:單行文本輸入
事件:
1.EditValueChanged:TextEdit值改變時(shí)候觸發(fā)
2.Validating:焦點(diǎn)離開TextEdit時(shí)觸發(fā),驗(yàn)證有效性(有效性的標(biāo)準(zhǔn)通過自己在事件里面的代碼來寫,若設(shè)置了EditMask,進(jìn)入該事件會先自動根據(jù)EditMask為標(biāo)準(zhǔn)來驗(yàn)證有效性,完成之后執(zhí)行事件里面的代碼)3.KeyPress:鍵盤按下某一個(gè)鍵觸發(fā)。
屬性:
1.TextEdit.Mask.EditMask:可以規(guī)定輸入的格式,類似正則表達(dá)式
2.TextEdit.Mask.MaskType:指定可填寫的文本類型(如:數(shù)字、字符串或者是根據(jù)正則表達(dá)式(RegEx)來約束···EditMask與MaskType配合使用,若MaskType= RegEx,EditMas = 某正則表達(dá)式,當(dāng)MaskType是DateTime,Numeric時(shí),EditMask為指定的相應(yīng)類型)3.MaxLength:可填的最大字符長度,僅當(dāng)MaskType = None時(shí)有效
4.TextEdit.Mask.BeepOnError:當(dāng)用戶輸入不滿足EdiMask要求時(shí),是否發(fā)beep聲。5.UseSystemPasswordChar: true –密碼框(輸入的內(nèi)容在界面上是 ****)6.實(shí)現(xiàn)水印文字:Properties.NullValuePrompt = “輸入密碼”
Properties.NullValuePromptShowForEmptyValue = true;
memoEdit:多行文本輸入
屬性: 事件:
checkEdit:
屬性:
1.Checked:是否選中
事件:
1.CheckedChanged:勾選狀態(tài)改變時(shí)觸發(fā)(選中變不選中,不選中變選中)
checkedListBoxControl:(實(shí)現(xiàn)多選框)
屬性: 事件:
1.DrawItem:光標(biāo)在選擇菜單上移動的時(shí)候觸發(fā),即光標(biāo)在選擇項(xiàng)上來回移動時(shí)觸發(fā)(與ComboBoxEdit的DrawItem事件相似)2.ItemCheck:勾選或取消勾選Item時(shí)觸發(fā)。(e.Index:點(diǎn)擊的Item的索引,e.State:改變的狀態(tài))3.方法: 1.UnCheckAll();//全部不選 2.CheckAll();//全選中
PopupContainerEdit:
屬性:
1. Properties.PopupControl:(PopupContainerEdit和PopupContainerControl組合,實(shí)現(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:
當(dāng)在最后一頁時(shí)中間按鈕變?yōu)椤敖Y(jié)束”
事件:
1.CancelClick:點(diǎn)擊“取消”觸發(fā)。2.FinishClick:最后一頁點(diǎn)擊結(jié)束觸發(fā)。3.SelectedPageChanging:切換頁面時(shí)觸發(fā)。(e.Direction:判斷是向前翻頁還是向后翻頁,e.Page:新頁)
4.SelectedPageChanged:切換頁面后觸發(fā)。(e.PrevPage:舊頁)
wizardPage:(wizardControl中的每一頁)
屬性:
1. DescriptionText:2. Text:
事件:
1.PageValidating:驗(yàn)證事件。(e.Direction:判斷是向前翻頁還是向后翻頁,e.Valid = false;翻不過去)2.simpleButton:
屬性:
1.事件: buttonEdit:
屬性: 事件:
dropDownButton: 屬性:
1.DropDownControl:(dropDownButton控件實(shí)現(xiàn)下拉框)
增加2個(gè)控件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:當(dāng)LayoutStyle為SingleRecordViewBandsView,設(shè)置該屬性為true,列寬自動填充 6.XtraTabControl 屬性:
1.ClosePageButtonShowMode:如何顯示每個(gè)tabPage上的關(guān)閉按鈕。
如:InActiveTabPageHeader:當(dāng)TabPage為當(dāng)前選中時(shí)顯示關(guān)閉按鈕。2.HeaderLocation:標(biāo)簽位置(上下左右)3.ShowTabHeader:是否顯示標(biāo)簽
4.HeaderOrientation:標(biāo)簽方向(Horizontal:水平,Vertical豎直)5.HeaderButtons:當(dāng)tabpage過多,需要翻頁時(shí),設(shè)置翻頁按鈕如何組合。如
6.TabPageWidth:統(tǒng)設(shè)標(biāo)簽寬度。
事件:
1.CloseButtonClick:點(diǎn)擊標(biāo)簽上的X按鈕事件
XtraTabPage:
屬性:
1.ShowCloseButton:是否顯示關(guān)閉按鈕。2.TabPageWidth:這一頁的標(biāo)簽寬度。
第二篇:總結(jié)數(shù)位DP算法
數(shù)位dp是一種計(jì)數(shù)用的dp,一般就是要統(tǒng)計(jì)一個(gè)區(qū)間[le,ri]內(nèi)滿足一些條件數(shù)的個(gè)數(shù)。比如,[1,10000] 中統(tǒng)計(jì)不含有4的數(shù)。
所謂數(shù)位dp,字面意思就是在數(shù)位上進(jìn)行dp咯。就是對數(shù)字每一位每一位遞推
此類題目最基本的暴力方法:
1.for(int i=le;i<=ri;i++)
2.if(Check(i))ans++;
而數(shù)位DP就是從最低(高)位起,一位一位的放數(shù)字,然后記憶化一下,累加一下
有兩種方法,一是遞推,二是記憶化搜索
一,記憶化搜索:
思路來自: 數(shù)位dp總結(jié)之從入門到模板 假設(shè)題目要求是不含有62的數(shù)
狀態(tài)定義:d[pos][pre] 表示當(dāng)前枚舉到pos位置,且pos+1位的數(shù)字是pre,此時(shí)滿足題意的數(shù)字的個(gè)數(shù)(也即是pre==6時(shí),pos該位置不能放2)還要個(gè)數(shù)組a[i]保存第i位的數(shù)字,如213,a[0]=3,注意是從右往左數(shù)
有個(gè)問題是枚舉第pos位數(shù)時(shí),此位置放數(shù)字的范圍要判斷一下,比如題目給出在[1,894] 枚舉的時(shí)候要判斷是否在894以內(nèi)
比如,213,第一位放了2,那么第二位就只能放0~1,所以模板中用了個(gè)limit判斷pos前的幾位數(shù)字是否與n一樣,true的話只能枚舉0~a[pos],false就是0~9,不然比題目要求的213大了
還有個(gè)問題是前導(dǎo)0的問題,假如枚舉5位數(shù),你放的時(shí)候前2位都是00,那數(shù)字不變成3位了嘛,所以需要個(gè)lead保存前幾位是否都是0,當(dāng)然這是看題意的,有時(shí)候題目不要求,可以直接省去
好了,看模板:
1.typedef long long ll;2.int a[20];
3.ll dp[20][state];//不同題目狀態(tài)不同
4.ll dfs(int pos,/*state變量*/,bool lead/*前導(dǎo)零*/,bool limit/*數(shù)位上界變量*/)//不是每個(gè)題都要判斷前導(dǎo)零
5.{
6.//遞歸邊界,既然是按位枚舉,最低位是0,那么pos==-1說明這個(gè)數(shù)我枚舉完了
7.if(pos==-1)return 1;/*這里一般返回1,表示你枚舉的這個(gè)數(shù)是合法的,那么這里就需要你在枚舉時(shí)必須每一位都要滿足題目條件,也就是說當(dāng)前枚舉到pos位,一定要保證前面已經(jīng)枚舉的數(shù)位是合法的。不過具體題目不同或者寫法不同的話不一定要返回1 */ 8.//第二個(gè)就是記憶化(在此前可能不同題目還能有一些剪枝)
9.if(!limit &&!lead && dp[pos][state]!=-1)return dp[pos][state];10./*常規(guī)寫法都是在沒有限制的條件記憶化,這里與下面記錄狀態(tài)是對應(yīng),具體為什么是有條件的記憶化后面會講*/
11.int up=limit?a[pos]:9;//根據(jù)limit判斷枚舉的上界up;這個(gè)的例子前面用213講過了
12.ll ans=0;13.//開始計(jì)數(shù)
14.for(int i=0;i<=up;i++)//枚舉,然后把不同情況的個(gè)數(shù)加到ans就可以了
15.{
16.if()...17.else if()...18.ans+=dfs(pos-1,/*狀態(tài)轉(zhuǎn)移*/,lead && i==0,limit && i==a[pos])//最后兩個(gè)變量傳參都是這樣寫的
19./*這里還算比較靈活,不過做幾個(gè)題就覺得這里也是套路了
20.大概就是說,我當(dāng)前數(shù)位枚舉的數(shù)是i,然后根據(jù)題目的約束條件分類討論
21.去計(jì)算不同情況下的個(gè)數(shù),還有要根據(jù)state變量來保證i的合法性,比如題目
22.要求數(shù)位上不能有62連續(xù)出現(xiàn),那么就是state就是要保存前一位pre,然后分類,23.前一位如果是6那么這意味就不能是2,這里一定要保存枚舉的這個(gè)數(shù)是合法*/
24.}
25.//計(jì)算完,記錄狀態(tài)
26.if(!limit &&!lead)dp[pos][state]=ans;
27./*這里對應(yīng)上面的記憶化,在一定條件下時(shí)記錄,保證一致性,當(dāng)然如果約束條件不需要考慮lead,這里就是lead就完全不用考慮了*/
28.return ans;29.}
30.ll solve(ll x)31.{
32.int pos=0;
33.while(x)//把數(shù)位都分解出來
34.{
35.a[pos++]=x%10;//個(gè)人老是喜歡編號為[0,pos),看不慣的就按自己習(xí)慣來,反正注意數(shù)位邊界就行
36.x/=10;37.}
38.return dfs(pos-1/*從最高位開始枚舉*/,/*一系列狀態(tài) */,true,true);//剛開始最高位都是有限制并且有前導(dǎo)零的,顯然比最高位還要高的一位視為0嘛
39.}
40.int main()41.{
42.ll le,ri;
43.while(~scanf(“%lld%lld”,&le,&ri))44.{
45.//初始化dp數(shù)組為-1,這里還有更加優(yōu)美的優(yōu)化,后面講 46.printf(“%lldn”,solve(ri)-solve(le-1));47.} 48.}
注意:
那個(gè)if(!limit &&!lead &&dp[pos][state]!=-1)return dp[pos][state];limit 的數(shù)字必須要枚舉,不能直接返回,每次都要算
雖然這會導(dǎo)致重復(fù),但這可以解決狀態(tài)沖突,而且重復(fù)計(jì)算的數(shù)字也很少 舉例如下:
題目:不能出現(xiàn)連續(xù)的11(11、112、211都是不合法的)那么我們開始枚舉:
要枚舉3位數(shù),已經(jīng)枚舉了兩位01_,要枚舉最后一位,此時(shí)狀態(tài)為d[0][1] 即:在枚舉個(gè)位,且前一位為1,那么顯然得出d[0][1]=9 開始新的一輪枚舉,枚舉到11_,此時(shí)狀態(tài)也是d[0][1] 因?yàn)橐呀?jīng)有9這個(gè)值了,所以返回了,但很明顯答案是0,是錯(cuò)的 當(dāng)然可以多開一維防止?fàn)顟B(tài)沖突
可以看看數(shù)位DP模板題: HDU 2089 不要62 數(shù)位DP.二,遞推方法
思路來自:初探數(shù)位dp
狀態(tài)定義:d[i][j] 有i位數(shù)字,且第一位為j,在 0~j-1 + 000....999的符合題意的個(gè)數(shù),如 d[4][3] 就是在 3000~3999 的符合題意的個(gè)數(shù)
還要個(gè)數(shù)組a[i]保存第i位的數(shù)字,如213,a[1]=3,注意是從右往左數(shù)(下面是從1開始數(shù)起了)
這樣狀態(tài)定義的能更加方便,可以預(yù)處理,因?yàn)楫?dāng)一個(gè)數(shù)字的第一位比題目要求的第一位小后,后面的幾位能000..~999..如4269,如果第一位枚舉 3 _ _ _,那么后三位可以任取
模板如下:
1.for(int i=1;i<=7;i++)//枚舉位數(shù)
2.{
3.for(int j=0;j<10;j++)//枚舉第i位可能出現(xiàn)的數(shù)
4.{
5.for(int k=0;k<10;k++)//枚舉第i-1位可能出現(xiàn)的數(shù)
6.{
7.if(j!=4&&!(j==6&&k==2))//符合題意的條件
8.dp[i][j] += dp[i-1][k];9.} 10.} 11.}
以HDU 2089,解釋怎么算出答案(不含4,62的數(shù)字)
1.#include
2.#include
4.#include
5.using namespace std;6.int d[10][10],digit[10];
7.//d[i][j] 表示有i位數(shù)字,且第一位是j的數(shù)字的 滿足題意的數(shù)量
8.void init()9.{
10.d[0][0]=1;
11.for(int i=1;i<=7;i++)12.for(int j=0;j<=9;j++)13.for(int k=0;k<=9;k++)14.if(j!=4&&!(j==6&&k==2))15.d[i][j]+=d[i-1][k];16.}
17.int solve(int x)// [0,x)
18.{
19.int len=0;20.while(x){
21.digit[++len]=x%10;22.x/=10;23.}
24.digit[len+1]=0;25.int ans=0;
26.for(int i=len;i>=1;i--){
27.for(int j=0;j 28.if(j!=4&&!(j==2&&digit[i+1]==6))29.ans+=d[i][j];30.31.if(digit[i]==4||(digit[i+1]==6&&digit[i]==2))32.break;33.} 34.return ans;35.} 36.int main(int argc, char const *argv[])37.{ 38.int n,m;39.init(); 40.while(cin>>n>>m,n+m)41.cout< 42.return 0;43.} 假設(shè)一個(gè)數(shù)3229 得出 0000~0999 的個(gè)數(shù) 1000~1999 的個(gè)數(shù) 2000~2999 的個(gè)數(shù) 000~099 的個(gè)數(shù) 100~199 的個(gè)數(shù) 00~99 的個(gè)數(shù) 10~19 的個(gè)數(shù) 0~8 的個(gè)數(shù) 累加就是答案了 所以該區(qū)間是[0,n)是取不到的n的,注意計(jì)算的時(shí)候要加一個(gè)1 下面是一些題目: HDU 2089 不要62和4 HDU 3555 含49的數(shù) HDU 3652 含13且可以被13整除 codeforces 55d A 一個(gè)數(shù)字可以被它所有非零數(shù)整除的個(gè)數(shù) POJ 3252 Round Numbers HDU 4734 F(x)HDU 3709 Balanced Number HYSBZ 1799 self 同類分布 URAL 1057 Amount of Degrees * HDU 4507 吉哥系列故事——恨7不成妻 * 總結(jié): 可能要用到的數(shù)位DP的題目類型: 1~10^18,求某區(qū)間(很大),有特定要求的數(shù)字的個(gè)數(shù) 如求mod,求和,可以整除各位數(shù),不出現(xiàn)某些數(shù)...框架: int DFS(intpos,......)//DFS一位一位放數(shù)字,求出答案,函數(shù)的參數(shù)保存題目要求的狀態(tài) int solve(int n)//把n一位一位拆分,求出[1,n] 的符合要求的值 難點(diǎn):定義好狀態(tài)! 1.dp狀態(tài)要找好,不要出現(xiàn)狀態(tài)重疊現(xiàn)象,注意前導(dǎo)0有沒有影響 2.題目有求和sum,可能會很大,但可以轉(zhuǎn)化為保存sum對一個(gè)數(shù)求mod的值 3.有時(shí)候dp狀態(tài)定義不好可能要求每次DFS都要memset一下,換換思路想想通用的狀態(tài)定義,如sum從加法改為減法 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í)設(shè)置為白色 如果使用了自定義的背景圖片邊框會被忽略掉 text.backgroundColor = [UIColor whiteColor]; //設(shè)置背景 text.background = [UIImage imageNamed:@“dd.png”]; //設(shè)置背景 text.disabledBackground = [UIImage imageNamed:@“cc.png”]; //當(dāng)輸入框沒有內(nèi)容時(shí),水印提示 提示內(nèi)容為password text.placeholder = @“password”; //設(shè)置輸入框內(nèi)容的字體樣式和大小 text.font = [UIFont fontWithName:@“Arial” size:20.0f]; //設(shè)置字體顏色 text.textColor = [UIColor redColor]; //輸入框中是否有個(gè)叉號,在什么時(shí)候顯示,用于一次性刪除輸入框中的內(nèi)容 text.clearButtonMode = UITextFieldViewModeAlways; typedef enum { UITextFieldViewModeNever, 從不出現(xiàn) UITextFieldViewModeWhileEditing, 編輯時(shí)出現(xiàn) UITextFieldViewModeUnlessEditing, 除了編輯外都出現(xiàn) UITextFieldViewModeAlways 一直出現(xiàn) } UITextFieldViewMode; //輸入框中一開始就有的文字 text.text = @“一開始就在輸入框的文字”; //每輸入一個(gè)字符就變成點(diǎn) 用語密碼輸入 text.secureTextEntry = YES; //是否糾錯(cuò) text.autocorrectionType = UITextAutocorrectionTypeNo; typedef enum { UITextAutocorrectionTypeDefault, 默認(rèn) UITextAutocorrectionTypeNo, 不自動糾錯(cuò) UITextAutocorrectionTypeYes, 自動糾錯(cuò) } UITextAutocorrectionType; //再次編輯就清空 text.clearsOnBeginEditing = YES; //內(nèi)容對齊方式 text.textAlignment = UITextAlignmentLeft; //內(nèi)容的垂直對齊方式 UITextField繼承自UIControl,此類中有一個(gè)屬性contentVerticalAlignment text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; //設(shè)置為YES時(shí)文本會自動縮小以適應(yīng)文本窗口大小.默認(rèn)是保持原來大小,而讓長文本滾動 textFied.adjustsFontSizeToFitWidth = YES; //設(shè)置自動縮小顯示的最小字體大小 text.minimumFontSize = 20; //設(shè)置鍵盤的樣式 text.keyboardType = UIKeyboardTypeNumberPad; typedef enum { UIKeyboardTypeDefault,默認(rèn)鍵盤,支持所有字符 UIKeyboardTypeASCIICapable, 支持ASCII的默認(rèn)鍵盤 UIKeyboardTypeNumbersAndPunctuation, 標(biāo)準(zhǔn)電話鍵盤,支持+*#字符 UIKeyboardTypeURL,URL鍵盤,支持.com按鈕 只支持URL字符 UIKeyboardTypeNumberPad,數(shù)字鍵盤 UIKeyboardTypePhonePad,電話鍵盤 UIKeyboardTypeNamePhonePad, 電話鍵盤,也支持輸入人名 UIKeyboardTypeEmailAddress, 用于輸入電子 郵件地址的鍵盤 UIKeyboardTypeDecimalPad,數(shù)字鍵盤 有數(shù)字和小數(shù)點(diǎn) UIKeyboardTypeTwitter,優(yōu)化的鍵盤,方便輸入@、#字符 UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, } UIKeyboardType; //首字母是否大寫 text.autocapitalizationType = UITextAutocapitalizationTypeNone; typedef enum { UITextAutocapitalizationTypeNone, 不自動大寫 UITextAutocapitalizationTypeWords, 單詞首字母大寫 UITextAutocapitalizationTypeSentences, 句子的首字母大寫 UITextAutocapitalizationTypeAllCharacters, 所有字母都大寫 } UITextAutocapitalizationType; //return鍵變成什么鍵 text.returnKeyType =UIReturnKeyDone; typedef enum { UIReturnKeyDefault, 默認(rèn) 灰色按鈕,標(biāo)有Return UIReturnKeyGo, 標(biāo)有Go的藍(lán)色按鈕 UIReturnKeyGoogle,標(biāo)有Google的藍(lán)色按鈕,用語搜索 UIReturnKeyJoin,標(biāo)有Join的藍(lán)色按鈕 UIReturnKeyNext,標(biāo)有Next的藍(lán)色按鈕 UIReturnKeyRoute,標(biāo)有Route的藍(lán)色按鈕 UIReturnKeySearch,標(biāo)有Search的藍(lán)色按鈕 UIReturnKeySend,標(biāo)有Send的藍(lán)色按鈕 UIReturnKeyYahoo,標(biāo)有Yahoo的藍(lán)色按鈕 UIReturnKeyYahoo,標(biāo)有Yahoo的藍(lán)色按鈕 UIReturnKeyEmergencyCall, 緊急呼叫按鈕 } UIReturnKeyType; //鍵盤外觀 textView.keyboardAppearance=UIKeyboardAppearanceDefault; typedef enum { UIKeyboardAppearanceDefault,默認(rèn)外觀,淺灰色 UIKeyboardAppearanceAlert,深灰 石墨色 } UIReturnKeyType; //設(shè)置代理 用于實(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的代理是我,我會去實(shí)現(xiàn)把鍵盤往下收的方法 這個(gè)方法在UITextFieldDelegate里所以我們要采用UITextFieldDelegate這個(gè)協(xié)議 -(BOOL)textFieldShouldReturn:(UITextField *)textField { [text resignFirstResponder];//主要是[receiver resignFirstResponder]在哪調(diào)用就能把receiver對應(yīng)的鍵盤往下收 return YES;} 重寫繪制行為 除了UITextField對象的風(fēng)格選項(xiàng),你還可以定制化UITextField對象,為他添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個(gè)CGRect結(jié)構(gòu),制定了文本字段每個(gè)部件的邊界范圍。以下方法都可以重寫。 – textRectForBounds: //重寫來重置文字區(qū)域 – drawTextInRect: //改變繪文字屬性.重寫時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫繪制函數(shù),就不用調(diào)用super了.– placeholderRectForBounds: //重寫來重置占位符區(qū)域 – drawPlaceholderInRect: //重寫改變繪制占位符屬性.重寫時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫繪制函數(shù),就不用調(diào)用super了.– borderRectForBounds: //重寫來重置邊緣區(qū)域 – editingRectForBounds: //重寫來重置編輯區(qū)域 – clearButtonRectForBounds: //重寫來重置clearButton位置,改變size可能導(dǎo)致button的圖片失真 – leftViewRectForBounds: – rightViewRectForBounds: 委托方法 -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ //返回一個(gè)BOOL值,指定是否循序文本字段開始編輯 return YES;} -(void)textFieldDidBeginEditing:(UITextField *)textField{ //開始編輯時(shí)觸發(fā),文本字段將成為first responder } -(BOOL)textFieldShouldEndEditing:(UITextField *)textField{ //返回BOOL值,指定是否允許文本字段結(jié)束編輯,當(dāng)編輯結(jié)束,文本字段會讓出first responder //要想在用戶結(jié)束編輯時(shí)阻止文本字段消失,可以返回NO //這對一些文本字段必須始終保持活躍狀態(tài)的程序很有用,比如即時(shí)消息 return NO;} -(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ //當(dāng)用戶使用自動更正功能,把輸入的文字修改為推薦的文字時(shí),就會調(diào)用這個(gè)方法。 //這對于想要加入撤銷選項(xiàng)的應(yīng)用程序特別有用 //可以跟蹤字段內(nèi)所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計(jì)用途。 //要防止文字被改變可以返回NO //這個(gè)方法的參數(shù)中有一個(gè)NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中 return YES;} -(BOOL)textFieldShouldClear:(UITextField *)textField{ //返回一個(gè)BOOL值指明是否允許根據(jù)用戶請求清除內(nèi)容 //可以設(shè)置在特定條件下才允許清除內(nèi)容 return YES;} -(BOOL)textFieldShouldReturn:(UITextField *)textField{ //返回一個(gè)BOOL值,指明是否允許在按下回車鍵時(shí)結(jié)束編輯 //如果允許要調(diào)用resignFirstResponder 方法,這回導(dǎo)致結(jié)束編輯,而鍵盤會被收起[textField resignFirstResponder];//查一下resign這個(gè)單詞的意思就明白這個(gè)方法了 return YES;} 通知 UITextField派生自UIControl,所以UIControl類中的通知系統(tǒng)在文本字段中也可以使用。除了UIControl類的標(biāo)準(zhǔn)事件,你還可以使用下列UITextField類特有的事件 UITextFieldTextDidBeginEditingNotification UITextFieldTextDidChangeNotification UITextFieldTextDidEndEditingNotification 當(dāng)文本字段退出編輯模式時(shí)觸發(fā)。通知的object屬性存儲了最終文本。因?yàn)槲谋咀侄我褂面I盤輸入文字,所以下面這些事件發(fā)生時(shí),也會發(fā)送動作通知 UIKeyboardWillShowNotification //鍵盤顯示之前發(fā)送 UIKeyboardDidShowNotification //鍵盤顯示之后發(fā)送 UIKeyboardWillHideNotification //鍵盤隱藏之前發(fā)送 UIKeyboardDidHideNotification //鍵盤隱藏之后發(fā)送 1、Text :設(shè)置文本框的默認(rèn)文本。 2、Placeholder : 可以在文本框中顯示灰色的字,用于提示用戶應(yīng)該在這個(gè)文本框輸入什么內(nèi)容。當(dāng)這個(gè)文本框中輸入了數(shù)據(jù)時(shí),用于提示的灰色的字將會自動消失。 3、Background : 4、Disabled : 若選中此項(xiàng),用戶將不能更改文本框內(nèi)容。 5、接下來是三個(gè)按鈕,用來設(shè)置對齊方式。 6、Border Style : 選擇邊界風(fēng)格。 7、Clear Button : 這是一個(gè)下拉菜單,你可以選擇清除按鈕什么時(shí)候出現(xiàn),所謂清除按鈕就是出一個(gè)現(xiàn)在文本框右邊的小 X,你可以有以下選擇: 7.1 Never appears : 從不出現(xiàn) 7.2 Appears while editing : 編輯時(shí)出現(xiàn) 7.3 Appears unless editing : 7.4 Is always visible : 總是可見 8、Clear when editing begins : 若選中此項(xiàng),則當(dāng)開始編輯這個(gè)文本框時(shí),文本框中之前的內(nèi)容會被清除掉。比如,你現(xiàn)在這個(gè)文本框 A 中輸入了 “What”,之后去編輯文本框 B,若再回來編輯文本框 A,則其中的 “What” 會被立即清除。 9、Text Color : 設(shè)置文本框中文本的顏色。 10、Font : 設(shè)置文本的字體與字號。 11、Min Font Size : 設(shè)置文本框可以顯示的最小字體(不過我感覺沒什么用) 12、Adjust To Fit : 指定當(dāng)文本框尺寸減小時(shí),文本框中的文本是否也要縮小。選擇它,可以使得全部文本都可見,即使文本很長。但是這個(gè)選項(xiàng)要跟 Min Font Size 配合使用,文本再縮小,也不會小于設(shè)定的 Min Font Size。接下來的部分用于設(shè)置鍵盤如何顯示。 13、Captitalization : 設(shè)置大寫。下拉菜單中有四個(gè)選項(xiàng): 13.1 None : 不設(shè)置大寫 13.2 Words : 每個(gè)單詞首字母大寫,這里的單詞指的是以空格分開的字符串 13.3 Sentances : 每個(gè)句子的第一個(gè)字母大寫,這里的句子是以句號加空格分開的字符串 13.4 All Characters : 所以字母大寫 14、Correction : 檢查拼寫,默認(rèn)是 YES。 15、Keyboard : 選擇鍵盤類型,比如全數(shù)字、字母和數(shù)字等。 16、Appearance: 17、Return Key : 選擇返回鍵,可以選擇 Search、Return、Done 等。 18、Auto-enable Return Key : 如選擇此項(xiàng),則只有至少在文本框輸入一個(gè)字符后鍵盤的返回鍵才有效。 19、Secure : 當(dāng)你的文本框用作密碼輸入框時(shí),可以選擇這個(gè)選項(xiàng),此時(shí),字符顯示為星號。 1.Alignment Horizontal 水平對齊方式 2.Alignment Vertical 垂直對齊方式 3.用于返回一個(gè)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;} 上面那個(gè)NUMBERS是一個(gè)宏,可以在文件頂部定義: #define NUMBERS @”0123456789n”(這個(gè)代表可以輸入數(shù)字和換行,請注意這個(gè)n,如果不寫這個(gè),Done按鍵將不會觸發(fā),如果用在SearchBar中,將會不觸發(fā)Search事件,因?yàn)槟阕约合拗撇蛔屳斎雗,好慘,我在項(xiàng)目中才發(fā)現(xiàn)的。)所以,如果你要限制輸入英文和數(shù)字的話,就可以把這個(gè)定義為: #define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。當(dāng)然,你還可以在以上方法return之前,做一提示的,比如提示用戶只能輸入數(shù)字之類的。如果你覺得有需要的話。 限制只能輸入一定長度的字符 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;{ //string就是此時(shí)輸入的那個(gè)字符 textField就是此時(shí)正在輸入的那個(gè)輸入框 返回YES就是可以改變輸入框的值 NO相反 if([string isEqualToString:@”n“])//按回車可以改變 { return YES; } NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];//得到輸入框的內(nèi)容 if(self.myTextField == textField)//判斷是否時(shí)我們想要限定的那個(gè)輸入框 { if([toBeString length] > 20){ //如果輸入框內(nèi)容大于20則彈出警告 textField.text = [toBeString substringToIndex:20]; UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@”超過最大字?jǐn)?shù)不能輸入了“ delegate:nil cancelButtonTitle:@”O(jiān)k" otherButtonTitles:nil, nil] autorelease]; [alert show]; return NO; } } return YES;} 找工作,上長沙英才網(wǎng) 手機(jī)Android系統(tǒng)常用控件總結(jié) Notepad++編寫 可以負(fù)責(zé)粘貼到其中去 看得更清楚。(內(nèi)容包括了Android中的大部分常用控件及其事件的監(jiān)聽)第一章 1.1 Android中src文件夾包含項(xiàng)目的所有包及其資源文件,res文件夾包含了項(xiàng)目中所有的資源。比如:程序圖標(biāo)(drawable),布局文件(layout),常量(value),音頻文件(raw)R.java是在創(chuàng)建項(xiàng)目是自動生成的只讀文件,不可更改此文件。R文件其作用:是定義項(xiàng)目中所有資源的索引文件。 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()實(shí)例化一個(gè)Resources對象 String app_name =((String)r.getString(R.string.app_name));//然后通過getString()方法取得指定的索引的字符串。項(xiàng)目中所有常量都可以在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” //定義當(dāng)前視圖在屏幕上所占的寬度,“fill_parent”為填充整個(gè)屏幕寬度 /*android:layout_weight=“50”*/ //用于給一個(gè)布局中多個(gè)視圖的重要度賦值 android:layout_height=“fill_parent” //定義當(dāng)前視圖在屏幕上所占的高度,...........................高度 > 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)用程序由四個(gè)模塊組成:Activity,Service,Intent,ContentProvider(注意:一個(gè)應(yīng)用程序不一定包含全部的四個(gè)模塊).在使用時(shí)必須在AandroidManfest中進(jìn)行聲明。 Activity可以理解為用戶看到屏幕,主要用于處理應(yīng)用程序的整體性工作。如: a.監(jiān)聽系統(tǒng)事件,觸屏事件,為用戶顯示指定的View,啟動其他Activity等。b.所有應(yīng)用的Activity都繼承于android.app.Activity,該類是Android提供的基層類。 c.一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕。d.每一個(gè)活動都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類。e.大多數(shù)的應(yīng)用程序都是由多個(gè)Activity組成。 Intent Aandroid中主要用Intent類實(shí)現(xiàn)從一個(gè)Activity跳轉(zhuǎn)到另一個(gè)Activity。在Intent的描述結(jié)構(gòu)中,有兩個(gè)重要的部分:動作和對應(yīng)的數(shù)據(jù)。 典型的動作有MAIN,VIEW,PICK,EDIT.而動作對應(yīng)的數(shù)據(jù)則以URI的形式表示。例如:要查一個(gè)人的聯(lián)系方式,需要創(chuàng)建一個(gè)動作類型View的Intent ,以及一個(gè)表示這個(gè)人的URI.Intent的使用: button1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ Intent intent = new Intent();//創(chuàng)建一個(gè)Intent對象 intent.setClass(Activity01.this,Activity02.class);//指明要啟動的另一Activity02 startActivity(intent);//啟動一個(gè)新的Activity 找工作,上長沙英才網(wǎng) Activity01.this.finish();//關(guān)閉當(dāng)前Activity01 } });這里需要注意在Android中對新啟動的Activity進(jìn)行聲明。聲明方式: IntentReceiver 如果希望Android應(yīng)用能夠?qū)ν獠渴录ㄈ珉娫挻蛉霑r(shí),數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),)做出響應(yīng),可用使用IntentReceiver.雖然IntentReceiver在如上事件發(fā)生 時(shí)會使用NotificationManager通知用戶,但它并不能生產(chǎn)UI。IntentReceiver可以在AndroidManifest.xml中注冊,也可在代碼中使用Context.registerReceiver 進(jìn)行注冊。當(dāng)IntentReceiver被觸發(fā)時(shí),系統(tǒng)會在需要的時(shí)候啟動應(yīng)用。各種應(yīng)用還可以通過ContentReceiver()將他們自己的IntentReceiver廣播出去。??????? Content Provider 作用:主要用于不同應(yīng)用程序中的數(shù)據(jù)的傳遞。Content Provider 是一個(gè)特殊的存儲數(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的完整路徑。 下面這個(gè)這個(gè)例子通過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);//取得電話本中開始一項(xiàng)的光標(biāo),通過query方法查詢出符合標(biāo)準(zhǔn)的電話本記錄 //向下移動光標(biāo) 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);//顯示到屏幕上 其實(shí)TextView也是View的一種 } } 注意:在使用這些模塊中用到了讀取聯(lián)系人的API,所以必須在AndroidManifest.xml中聲明 聲明方式為: 找工作,上長沙英才網(wǎng) Service 后臺服務(wù),沒有界面 啟動service方法: a.Context.startService()b.Context.bindService()//與上一種方法不同處 如果這個(gè)Service沒有處于啟動狀態(tài),則將其啟動 下面這個(gè)例子以Activity中的倆個(gè)控件來控制播放一首Mp3.(例中:需要在res文件夾中創(chuàng)建一個(gè)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方法 * 觸筆點(diǎn)擊事件:通過實(shí)現(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(”點(diǎn)擊了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ù)點(diǎn)擊,官方API指出onKeyMultiple方法總是返回false,即它沒有handle,因此必須重寫才能實(shí)現(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;} //得到觸筆點(diǎn)擊的位置 int x =(int)event.getX();int y =(int)event.getY();//將獲得的坐標(biāo)轉(zhuǎn)成String類型的方法 DisplayToast(”觸筆點(diǎn)擊坐標(biāo):(“+Integer.toString(x)+”,“+Integer.toString(y)+”)“); return super.onTouchEvent(event);} /* 顯示Toast */ public void DisplayToast(String str){ Toast.makeText(this, str, Toast.LENGTH_SHORT).show();} } 我們分析了一些常用事件處理方式。每一個(gè)鍵都對應(yīng)一個(gè)鍵值。當(dāng)然也可根據(jù)需要來改變一些鍵的功能,需要我們自己構(gòu)建KeyEvent對象------------------有待進(jìn)一步學(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è)計(jì) 代碼設(shè)計(jì)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)生一個(gè)Toast.利用button.getText()得到按鈕顯示的內(nèi)容 Toast toast = Toast.makeText(Activity01.this, ”你點(diǎn)擊了““+button.getText()+””按鈕!“, Toast.LENGTH_LONG);//設(shè)置toast顯示的位置 toast.setGravity(Gravity.TOP, 0, 150);//顯示該Toast toast.show();} });-TextView 一個(gè)用來顯示文本的控件 xml設(shè)計(jì) 找工作,上長沙英才網(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個(gè)像素 android:layout_marginLeft=”30px“ //整個(gè)按鈕離左邊設(shè)置的內(nèi)容30個(gè)像素 android:layout_weight=”1“//控件權(quán)重 即占的比例 默認(rèn)值為0 android:gravity=”center_horizontal“//水平居中 android:padding=”3dip“ 代碼設(shè)計(jì)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 帶圖標(biāo)的按鈕 xml設(shè)計(jì) 代碼中設(shè)計(jì) imageButton.setImageDrawable(getResources().getDrawable(R.drawable.image2));//在代碼中設(shè)計(jì)使用的圖片(得到對象后) 監(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è)計(jì) 代碼設(shè)計(jì)EditText editText = new EditText(this);//得到EditText對象 editText.setTextSize(20);//設(shè)置字體大小 找工作,上長沙英才網(wǎng) editText.setHint(”請輸入賬號“);//設(shè)置當(dāng)m_EditText中為空時(shí)提示的內(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 多項(xiàng)選擇 需要對沒有按鈕設(shè)置監(jiān)聽器 xml設(shè)計(jì) checkBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){//對每個(gè)選項(xiàng)設(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 下拉列表 下面一個(gè)例子將可選內(nèi)容通過ArrayAdapter和下拉列表連接起來。設(shè)置監(jiān)聽器 通過setVisibility方法設(shè)置當(dāng)前顯示項(xiàng) 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è)置顯示當(dāng)前選擇的項(xiàng) arg0.setVisibility(View.VISIBLE);} @Override public void onNothingSelected(AdapterView> arg0){ // TODO Auto-generated method stub });} } }---------RadioGroup , RadioButton 單選選擇控件 一個(gè)單選選擇由兩部分組成,分別是前面的選擇按鈕和后面的內(nèi)容。按鈕通過RadioButton來實(shí)現(xiàn),答案通過RadioGroup來實(shí)現(xiàn) 如果確定是選擇哪一項(xiàng)那就要設(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個(gè)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(”請注意,回答錯(cuò)誤!“);} } });} 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 //如何實(shí)現(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的子類,所以你可以對它的對象進(jìn)行諸如外觀/字體/顏色等屬性值的設(shè)置。 completionThreshold:它的值決定了你在AutoCompleteTextView至少輸入幾個(gè)字符,它才會具有自動提示的功能。另,默認(rèn)最多提示20條。 dropDownAnchor:它的值是一個(gè)View的ID,指定后,AutoCompleteTextView會在這個(gè)View下彈出自動提示。 dropDownSelector:應(yīng)該是設(shè)置自動提示的背景色之類的。 dropDownWidth:設(shè)置自動提示列表的寬度。 你可以通過setAdapter()來給AutoCompleteTextView添加一個(gè)包含候選值列表的適配器(adapter)。--------此處沒實(shí)現(xiàn)過? 然而,由于用戶可以輸入一些不在候選值列表的數(shù)據(jù),AutoCompleteTextView不支 持selection listener。不過,你可以注冊一個(gè)TextWacther用于當(dāng)用戶輸入文本發(fā)生變化時(shí)發(fā)出通知。 -------------------------DatePicker,TimePicker 日期和時(shí)間 下例中首先需要在布局文件中定義DatePicker和TimePicker,然后通過Canlendar類獲得系統(tǒng)時(shí)間,接著通過init方法將日期傳給DatePicker, 并設(shè)置OnDateChangedListener來監(jiān)聽日期改變,當(dāng)時(shí)間被改變時(shí)需要設(shè)置setOnTimeChangedListener監(jiān)聽來設(shè)置時(shí)間。datepicker_timepicker.xml 找工作,上長沙英才網(wǎng) > 找工作,上長沙英才網(wǎng) public class Date_Time extends Activity{//如何實(shí)現(xiàn)日期隨系統(tǒng)不斷變化?要聯(lián)網(wǎng)才能實(shí)現(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小時(shí)制 //將日歷初始化為當(dāng)前系統(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è)置時(shí)間 //calendar.set(1987,10,29,23,23,23);//年 月 日 小時(shí) 分鐘 秒 textView_date_time.setText(”當(dāng)前時(shí)間:“+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(){//時(shí)間的監(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è)置時(shí)間 找工作,上長沙英才網(wǎng) textView_date_time.setText(”北京時(shí)間:“+hourOfDay+” : “+minute);} },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();}});} } ---------------Menu 操作應(yīng)用程序的菜單選項(xiàng) 第一個(gè)例子:通過XML文件來實(shí)現(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;} } =============== 第二個(gè)例子:在代碼中生成Menu 此例中包含倆個(gè)方法 注意區(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()方法第一個(gè)參數(shù)表示給這個(gè)新增的菜單項(xiàng)分配一個(gè)分組號; * 第二個(gè)參數(shù)表示給這個(gè)新增的菜單項(xiàng)分配一個(gè)唯一標(biāo)識id;第三個(gè)參數(shù)為菜單項(xiàng)的序號; 找工作,上長沙英才網(wǎng) * 第四個(gè)參數(shù)為菜單項(xiàng)的標(biāo)題。 我們可以通過調(diào)用Menu.setItemShown()或者M(jìn)enu.setGroupShown()方法來顯示或隱藏一些菜單項(xiàng)。 這里要注意的一個(gè)地方是:菜單項(xiàng)的顯示順序是按代碼中添加的順序來的,也就是說Menu.add()方法 只能在菜單的最后面新增一個(gè)菜單項(xiàng)。另外,第一個(gè)參數(shù)的分組標(biāo)識,不會改變菜單項(xiàng)的顯示順序。 方法一: //menu.add(0,0,0,R.string.menu1);方法一 //menu.add(0,1,1,R.string.menu2);方法二: SubMenu subMenu = menu.addSubMenu(1, 1, 2, ”選項(xiàng)“);//此方法和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()得到菜單項(xiàng)的ID,即上面的第二個(gè)參數(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;} } ============== 第三個(gè)例子:Context Menu的創(chuàng)建: 概述:Android 的上下文菜單類似于PC 上的右鍵菜單。當(dāng)為一個(gè)視圖注冊了上下文菜單之后,長按(2 秒左右)這個(gè)視圖對象就會彈出一個(gè)浮動菜單,即上下文菜單。任何視圖都可以 注冊上下文菜單,不過,最常見的是用于列表視圖ListView的item。 注意:Android 的上下文菜單不支持圖標(biāo)或快捷鍵。 創(chuàng)建一個(gè)上下文菜單的步驟: 1.覆蓋Activity 的onCreateContenxtMenu()方法,調(diào)用Menu 的add 方法添加菜單項(xiàng)(MenuItem)。 2.覆蓋Activity 的onContextItemSelected()方法,響應(yīng)上下文菜單菜單項(xià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(”這個(gè)是什么?“);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){ //獲取當(dāng)前被選擇的菜單項(xiàng)的信息 switch(item.getItemId()){ case 1: Toast toast=Toast.makeText(Context_Menu.this, ”你點(diǎn)擊了“+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, ”你點(diǎn)擊了“+buttont_context_Menu.getText(), Toast.LENGTH_LONG);toast1.setGravity(Gravity.TOP, 100, 300);toast1.show();break; 找工作,上長沙英才網(wǎng) } return true;} } ============== 第四個(gè)例子:動態(tài)Menu 此為動態(tài)Menu的實(shí)現(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自帶的圖標(biāo) } 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 一個(gè)用來顯示列表的控件 xml設(shè)計(jì) 代碼設(shè)計(jì) 第一個(gè)例子: 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 ==================== 第二個(gè)例子: 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);//定義一個(gè)List,該List對象為第一個(gè)一級條目 提供數(shù)據(jù) List //定義一個(gè)List,該List對象用來存儲所有二級條目對象 List 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è)置給當(dāng)前的Activity } } ============================= 第三個(gè)例子:自定義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));} * 這是一個(gè)線性布局的View,其中包含一個(gè)TextView 和一個(gè)ImageView.* 且為垂直布局 }-----------------------public class ListCombinAdapter extends BaseAdapter{------------繼承BaseAdapter 且必須重寫五個(gè)函數(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){//得到一個(gè)顯示在屏幕上的View ImageTextView imageTextView;if(convertView == null){//判斷原來的View是否存在 如果不存在利用ImageTextView創(chuàng)建一個(gè)View imageTextView = new ImageTextView(wcontext,(String)list.get(position).textView.getText(),list.get(position).imageView.getDrawable());}else{ imageTextView =(ImageTextView)convertView;//強(qiáng)制轉(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);//不需要此項(xiàng) ListCombinAdapter listCombinAdapter = new ListCombinAdapter(this);listCombinAdapter.addItem(”不知道此處的字符串起什么作用“,getResources().getDrawable(R.drawable.image2));listCombinAdapter.addItem(”不知道此處的字符串起什么作用“, getResources().getDrawable(R.drawable.image3));setListAdapter(listCombinAdapter);} } ===================== 第四個(gè)例子: simpleadapter2.xml 找工作,上長沙英才網(wǎng) android:orientation=”horizontal“> 找工作,上長沙英才網(wǎng) android:gravity=”right“ android:textSize=”10pt“ /> public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);ArrayList DP優(yōu)化 學(xué)習(xí)小結(jié) 2010-08-27 15:55 這兩天簡單學(xué)習(xí)了一些動態(tài)規(guī)劃的優(yōu)化技巧,感覺自己的數(shù)學(xué)實(shí)在太弱了,雖然大概知道怎么用,但很多證明自己理解的還不是很透。 關(guān)于用單調(diào)隊(duì)列優(yōu)化的動態(tài)規(guī)劃以前整理過一些,可以看這里:【單調(diào)隊(duì)列 學(xué)習(xí)小結(jié)】 四邊形不等式優(yōu)化 主要是對于dp(i,j)的決策點(diǎn) s(i,j),通過單調(diào)性證明 s(i,jpo[p2].y)/(po[p1].xsum[arr[head]]);po[i].x = a * sum[i]; po[i].y = dp[i] + a * sum[i] * sum[i]po[p2].y)/(po[p1].xf[p2]f[p2]f[arr[head]]f[arr[head]]sum[p2]p2); } inlinelonglong SS(int p1, int p2){ return num[p1 +1]sum[p1] + p1 * num[p1 +1]sum[p2] + p2 * num[p2 +1]); } inlinebool rate(int p1, int p2, int p3){ if(GG(p1, p2)* SS(p2, p3)>= GG(p2, p3)* SS(p1, p2))returnfalse;elsereturntrue; } int main(int argc, char** argv){ while(scanf(“%d%d”, &n, &m)!= EOF){ for(int i =1;i <= n;i++)num[i] = next_int(); sort(num +1, num + n +1); sum[0] =0; for(int i =1;i <= n;i++)sum[i] = sum[i-1] + num[i];dp[0] =0; int head =0, rear =0; arr[++rear] =0; for(int i = m;i <= n;i++){ for(int k = head +1;k <= rear;k++){ if(cal(i, arr[k])<= cal(i, arr[head]))head +=1;elsebreak; } dp[i] = cal(i, arr[head]); if(im +1; while(head +2<= rear){ if(rate(arr[rear-2], arr[rear-1], arr[rear])==false){arr[rear-1] = arr[rear]; rear-=1; } elsebreak; } } cout << dp[n] << endl; } return(EXIT_SUCCESS); }第三篇:iOS UITextField控件總結(jié)
第四篇:手機(jī)Android系統(tǒng)常用控件總結(jié)
>> list0 = new ArrayList
>>();list0.add(list21);list0.add(list31);
第五篇:DP優(yōu)化 學(xué)習(xí)小結(jié)