版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫 )7.1.特簡介,是一款輕量型的數(shù)據(jù)庫,是遵守ACID(原子性、一致性、性、持久性)的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),多用于嵌入式開發(fā)中。Android平臺中嵌入了一個關(guān)系型數(shù)據(jù)庫,和其他數(shù)據(jù)庫不同的是存除非是主鍵被定義為Integer,這時只能64位整創(chuàng)建數(shù)據(jù)庫的表時可以不指定數(shù)據(jù)類型,例如:CREATETABLE (idINTEGERPRIMARYKEYAUTOINCREMENT,name支持大部分標(biāo)準(zhǔn)SQL語句,增刪改查語句都是通用的,分頁查詢語句和MySQLSELECT*FROM LIMIT20OFFSET10SELECT*FROM LIMIT10,20與MySql的不同之處主鍵自增長:是autoincrementMySql是auto_increment 獲取可讀數(shù)據(jù)庫、可寫數(shù)據(jù)庫的區(qū)別AndroidJunit(AndroidJunit定義類繼承OpenHelper構(gòu)造函數(shù),4重寫onCreate()方法重寫upGrade()方法publicpublic*OpenHelperOpenHelper@paramcontext@paramname@paramfactory游標(biāo)結(jié)果集工廠,如果需要使用則需要自定義結(jié)果集工廠,null值代表使用默認(rèn)結(jié)果集工廠@paramversion OpenHelper(Contextcontext,Stringname,CursorFactoryintversion)super(context,name,factory,}publicvoidDatabasedb)//數(shù)據(jù)庫第一次被創(chuàng)建的時候執(zhí)行如下sql語句創(chuàng)建一 db.execSQL("create(idintegerprimarykeynamevarchar(20),phonevarchar(20),moneyinteger(20),age}@paramdb@paramoldVersion@paramenwVersionpublicpublicvoidDatabasedb,intoldVersion,intnewVersion)//if(oldVersion==1&&newVersion==2)db.execSQL("alter addcolumnbalance}}}創(chuàng)建一 OpenHelperTest類,用于測試上面的代碼OpenHelperTestextendsAndroidTestCaseDatabaseOpenHelperhelper= .db",null,DatabasewritableDatabase=return}}執(zhí)行完上面代碼后,通過DDMS,查 .itheima. .db-journal文件會被自動創(chuàng)建,該文件是的一個臨時的日志文件,主要用于數(shù)據(jù)庫的事務(wù)回滾操作了。但是Android在測試類中創(chuàng)建該類對象,調(diào)用getWritableDatabase()或者如果數(shù)據(jù)庫不存在,創(chuàng)建數(shù)據(jù)庫文件,執(zhí)行onCreae()方法,并獲取數(shù)據(jù)庫對象如果數(shù)據(jù)庫存在,版本號沒有發(fā)生改變,直接獲取數(shù)據(jù)庫對象如果數(shù)據(jù)庫存在,版本號提升,先執(zhí) onUpgrade()方法,再獲取數(shù)據(jù)庫對數(shù)據(jù)庫并不是初始化MyHelper如果版本號降低,應(yīng)用降級。并且不重寫onDowngrade,就會調(diào)用父類的Android提供了一個名為Database的類,該類封裝了一些操作數(shù)據(jù)庫的API,使用該類可以完成對數(shù)據(jù)進(jìn)行添加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。和JDBC數(shù)據(jù)庫不同,操作數(shù)據(jù)庫無需加載驅(qū)動,不用獲取連接,直接可常用方法:獲 Database對象之后通過該對象直接可以執(zhí)行SQL語之類有更改行為的SQL語句Database.rawQuery():用于執(zhí)行select查詢語句。getReadableDatabase() getWritableDatabase()的區(qū)查看源代碼后我們發(fā)現(xiàn)getReadableDatabase()在通常情況下返回的就是getWritabeDatabae()方法最后會使用一個成員變量記住這個數(shù)據(jù)庫對象,下次打開時判斷是否重用Databaseinsert()、delete()、update()、query()四個方法也可以對數(shù)據(jù)庫進(jìn)行操作,詳情參照7.3.4執(zhí)行SQLSQL語句能夠防止SQL注入execSQL(StringsqlCursorrawQuery(StringsqlStringselectionArgs):查詢(拼串方式,第二個參數(shù)傳null即可)。下面通過一個案例來演示通過執(zhí)行SQL實現(xiàn)對數(shù)據(jù)的增刪改查操作,這里使用本文檔中7.2章節(jié)中的工程(★★★★)。 intage=cursor.getInt(cursor.getColumnIndex("age"));Stringphone=cursor.getString(2);}}publicvoidDatabasedataBase=Stringsql="updatesetage=?where//將zhangsan的修改為18}publicvoidDatabasedataBase= s=newArrayList< Stringsql="selectname,age,phonefrom Cursorcursor=dataBase.rawQuery(sql,null);Stringname=intage=p=new }ps){}:在上面例子各個方法中,為了方便AndroidJunit我們發(fā)現(xiàn)在7.3.2中的query方法返回了一個Cursor,那么CursorCursor與JDBC中的ResultSeturor中一個行索引一個列索引,游標(biāo)中本身沒有數(shù)據(jù),它只是指向數(shù)據(jù)庫的索引,模擬一個行、列的表結(jié)構(gòu)。其起始位置是在-1的位置上的。moveToPreviou集的第一行,返回值為false,否則為true。moveToirst為fle,否則為true。moveToLast():用于將游標(biāo)移動到結(jié)果集的最后一行,如果結(jié)果集為空,返回值為flse,否則為true。(update這些方法封裝了部分SQL語句,通過參數(shù)進(jìn)行拼接,這些方法實際上是給那些不太了解SL語法的開發(fā)者使用的(對我來講直接通過sql操作數(shù)據(jù)庫反而要簡單的多,這兩種操作數(shù)據(jù)庫的方式要求都會,開發(fā)過程中用什么方法就要看個人習(xí)慣和公司有無特殊規(guī)定了SL語法的程序員而言,直接使用execSQL()和rawQuery()方法執(zhí)行SQL語句就能完成數(shù)據(jù)的添加、刪除、更新、查詢操作。這四個方法主要是在使用內(nèi)容提供者時使用,因為contentprovider中提供的增刪改查方法,與這一套一樣,方便調(diào)用傳參。(等學(xué)完ContentProvider自然明白)insertnullColumnHacknull,就無法插入一條空數(shù)據(jù)(2.3,4.0可以寫null)如果想插入空數(shù)據(jù),第二個參數(shù)必須寫一個列名(任意列名,無法構(gòu)建sql語句onentue:鍵值對:鍵對應(yīng)列明,值對應(yīng)插入的值返回值ongd,插入的主鍵iddelete("update("表名",contentValuesquery下面通過代碼來演 操作數(shù)據(jù)庫的過程,我們這里直接使用本文7.2中工程,只需修 OpenHelperTest類中方法即可publicvoidinsert()DatabasedataBase=getDataBase();ContentValuesvalues=newContentValues();values.put("name","heima");values.put("age", 第一個參數(shù)table該字段的值設(shè)為NULLnullphone字段為空的時候系統(tǒng)自動給其值設(shè)置為是表中的字段,value}","phone",publicvoiddelete()Databasedatabase=*第一個參數(shù)table*第二個參數(shù)whereClausenull則刪除表中*第三個參數(shù)whereArgs 數(shù),沒有寫null*刪除名字為"heima"database.delete("","name=?",new}publicvoidupdate()Databasedatabase=getDataBase();ContentValuesvalues=newContentValues();values.put("age","100");ContentValues設(shè)置要修改的字段的新值,沒有涉及到的 ",values,"name=?",new}publicvoidquery()Databasedatabase=第一個參數(shù)table第二個參數(shù)columnsselectionselectionArgsgroupBy分組字段,nullAfilterdeclarewhichrowgroupstoincludeintheifrowgrouisbeingused,formattedasanSQLHAVING(excludingtheHAVINGitself).Passingnullwillcauseallrowtobeincluded,andisrequiredwhenrowgrouisnotbeingorderBy排序字段,asc正序,desc倒序,nullCursorcursor=database.query("",newString[]{"name,age,phone"},"name=?",newString[]{"heima"},null,null,null);intid=Stringname=cursor.getString(1);System.out.println(id+"_"+name+"_"+}publicvoidDatabasedatabase=getDataBase();List< s=newArrayList< 該方法跟Cursorcursor= ",newnull,null,null,null,rsonp=new Stringname=intage=}}}跟MySql、Oracle等常用數(shù)據(jù)庫一樣, 數(shù)據(jù)庫也對事物有較好的支持。使用方法:beginTransaction() 結(jié)束事務(wù),包括提交和回滾,需要放在finally中執(zhí)行,否則事務(wù)只有到超時的時候才自動結(jié)束,會降低數(shù)據(jù)庫并發(fā)效率執(zhí)行過程:beginTransactionendTransaction務(wù)的標(biāo)志是否為成功,如果程序執(zhí)行到endTransaction之前調(diào)用了setTransactionSuccessful方法設(shè)置事務(wù)的標(biāo)志為成功,則提交事務(wù);如果沒有調(diào)用setTransactionSuccessful方法則回滾事務(wù)。用本文檔7.2章節(jié)中的Android工程中的OpenHelperTest類即可。案例:銀行轉(zhuǎn)賬,需求:客戶lisi向zhangsan的賬戶上轉(zhuǎn)了100塊。publicpublicvoidOpenHelperonUpgradeOpenHelperhelper=OpenHelper(getContext(),null,Databasedatabase=try setbalance=balance-100name=?",new上面的扣除lsii的100元錢不會被真正執(zhí)行//inta1/0;注釋掉,才發(fā)現(xiàn)事務(wù)成功了,lisi100zhangsan100int setbalance=balance+100wherename=?",new功}提交事務(wù),如果}}在批量修改數(shù)據(jù)的時候,由于事務(wù)是在進(jìn)行事務(wù)提交時將要執(zhí)行的SQL操作打開數(shù)據(jù)庫連接執(zhí)行,其執(zhí)行速度比逐條執(zhí)行SQL語句的速度快了很多倍。因此當(dāng)我們開發(fā)的該案例依然使用本文檔7.2中的Android工程。OpenHelperOpenHelperhelper=OpenHelper(getContext(),null,Databasedatabase=longbeginTime=for(int }longendTime=不使用事務(wù)插入publicvoidbeginTime=for(inti=0;i<10000;i++){ }endTime=}執(zhí)行上面代碼,查看控制臺,發(fā)現(xiàn)不使用事務(wù)耗時19397毫秒,使用事務(wù)耗時查看數(shù)據(jù)庫文查看數(shù)據(jù)庫有多種方法,上面章節(jié)的演示過程其實就是通過AndroidAPI的方 Expert工具2、通過Android3工具。通過Expert工Expert(/)是一款強(qiáng)大的 工具。從官網(wǎng)上的版本只能免費試用30天,試用期過后如果繼續(xù)使用需要支付一定的在DDMS視圖中打開 然后打開Expert軟件, 數(shù)據(jù)拖拽到如下圖的左側(cè)區(qū)域即可Android提供了一個3.exe程序,位于sdk的tools 下,用于操作1、3數(shù)據(jù)庫名稱:進(jìn)入數(shù)據(jù)庫操作模式 eg:3contacts.db eg:.tables3、schema:查看查看庫中所有表的DDL語句eg:.schema4、help 5、headerson/off :顯示表頭,默認(rèn)off 6、modelist|column|insert|line|tabs|tcl|csv:改變輸出格式eg:.modecolumn NULL空值數(shù)據(jù)顯示問題 eg:.nullValueNULL8、dump表名 生成形成表的SQLeq:.dump9、dump: 生成整個數(shù)據(jù)庫的SQLeq:.dump9、exit: 退出操作模式 eq:.exit 使用cd命令進(jìn)入數(shù)據(jù)庫所 (數(shù)據(jù)庫的路徑為”/data/data/應(yīng)用包名/databases/數(shù)據(jù)庫使用” 數(shù)據(jù)庫名”進(jìn)入數(shù)據(jù)庫操作模特點?不區(qū)分?jǐn)?shù)據(jù)類型等等,參照上邊的章節(jié)即可。數(shù)據(jù)庫如何?面試中有可能會被問到,公司之前應(yīng)用的數(shù)據(jù)庫是如何的修改,就改下數(shù)據(jù)庫版本號,然后在onUpgrade里調(diào)用即可。數(shù)據(jù)庫用事務(wù)么?每一個item對象。DataBase這個比較重要,每個應(yīng)用都會用到數(shù)據(jù)庫,用到數(shù)據(jù)庫就要用到這個類。會使用增刪改查方法,事務(wù),以及execSQL即可。OpenHelper事務(wù) 重websql的開發(fā)人員,sql語句是必須要會的,所以大家一定要注意。多加練習(xí)?。?!如果sqlListView的特點:屏幕上可以展示幾個控件,ListView就初始化幾個,節(jié)省內(nèi)存,防止內(nèi)存溢出。象個數(shù)為:屏幕顯示的條目的個數(shù)+1。ListView自帶ScrollView的功能,可以實現(xiàn)界面滾動。ListView控件的設(shè)計遵循MVC設(shè)計模式:modeListViewview下面我們依然通過案例來演示ListViewActivityListViewListView。:布局文件的名字必須全部都是小寫創(chuàng)建ListView展示樣式布局文件,文件名為創(chuàng)建業(yè)務(wù)類操作數(shù)據(jù)庫,在該工程中新創(chuàng) DaoOpenHelperhelper;helper= OpenHelper(context, ",null,}public > s=newArrayList< Cursorcursor=database.rawQuery("selectname,age,phonefromonp=new intage=cursor.getInt(1);} }}修改main_activity.xml>android:text="ListView中"使用并修改該工程默認(rèn) 類,MainActivity。該類的主要業(yè)務(wù)功能有調(diào)用Dao獲取ListViewBaseAdaptergetCountgetViewintgetCountListViewviewgetView(intposition,ViewconvertView,ViewGroupparent)第一個:position:當(dāng)前要顯示的項在ListView第二個:convertView:就是被拖出去的View對象,getView用這個對象使得拖出去即將銷毀的條目重用,即緩存對象。LisView中創(chuàng)建對象的個數(shù)=屏幕顯示的條目數(shù)+1為getView的參數(shù)傳遞進(jìn)來。只需修改此緩存對象的內(nèi)容,直接使用即可,而不需要再重新new一個新的對象出來,節(jié)省了內(nèi)存,防止內(nèi)存溢出。在此方法的代碼中:ViewviewView.inflate(MainActivity.thisR.layout.item,null);通過這句代碼根據(jù)layout布局創(chuàng)建視圖view對象然后通過view.findViewById();可以獲取itemlayoutviewpublicObjectgetItem(intposition)return}publiclonggetItemId(intposition)return}publicViewgetView(intposition,ViewconvertView,ViewGroup{Viewif{view=}elseview=View.inflate(MainActivity.this,R.layout.listview_item,}TextViewtv_username=(TextView)view.findViewById(R.id.tv_username);TextViewtv_age=(TextView)view.findViewById(R.id.tv_age);TextViewtv_phone=(TextView)view.findViewById(R.id.tv_phone); return}}}至此,代碼和布局文件均已經(jīng)完成,運行程序后效果圖如下ListView的OnItemClickListener條目點擊器實現(xiàn)此接口,重寫的方法:條目點擊publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longparent:就是listview對象:可以通過parent.getItemAtPosition(position);獲取ListVIew適配器BaseAdapter的publicObjectgetItem(intposition)的返回值listview.setselection(item索引);//這樣可以定義到某個索引的itemListView的item條目數(shù):listView.getCount();復(fù)用舊的convertViewListView,在上下拖動的時候,會不斷的加載View和銷毀View,我們可以復(fù)用if(convertViewnull//if(convertViewnull//viewview=}這個view對象為ListView的適配器,getView返回的對象。減少view.findViewById(),查找控件的操作如果布局文件比較復(fù)雜,findviewById就比較耗時。在這里我們可以利用花名冊的辦法來減少查找操作:步驟:先定義記事本、花名冊:staticclassview.setTag(objectidview分批加載:解決用戶體驗問題,不能解決內(nèi)存溢出(listView展示條目過多會出現(xiàn)內(nèi)存溢出),先加載幾十條,用戶拖動到底部,顯示加載框,再去加載當(dāng)用戶拖到頁面底部:需要把下一次的部分?jǐn)?shù)據(jù)返回需要知道istview什么時候拖到底部isVeetOnSroLitener();設(shè)置滾動器onSro()//滾動的方法scroll_state_fling_idle_touch_scroll如果位置(從0開始)等于集合-1:說明界面拖到最后一個元素,加載新數(shù)據(jù)arraylist.addall(newlist)adapter.分批加載并不能解決,內(nèi)存溢出問題,只是改戶體 中使用的適配器有 BaseAdapter、ArrayAdapter、SimpleAdapter。8.1章節(jié)中我們演示了BaseAdapter的用法。下面通過兩個案例分別介紹ArrayAdapterSimpleAdapterArayAdapter不僅可以用于顯示簡單的文本,也可以顯示樣式和內(nèi)容豐富的對象。在這里只演示其最簡單的使用方法。為了方便演示,新創(chuàng)建一個Androd工程,工程名字就叫Adapter,使用該工程默認(rèn)的布局文件和Activity類。布局如下tools:context=".MainActivity">android:text="ArrayAdapter的使用MainActivity代碼如下packagepackageimportimportimportimportpublicclassMainActivityextendsActivityprivateListViewlv;{super.onCreate(savedInstanceState);lv=(ListView)findViewById(R.id.lv);Stringcitiesnew ","廣州","杭州ArrayAdapterArrayAdapter<String>myAdapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,cities);}}數(shù)據(jù)是以List<Map<String,?>>形式封裝數(shù)據(jù),List的每一節(jié)對應(yīng)ListView的每一行。HashMap的每個鍵值數(shù)據(jù)映射到布局文件中對應(yīng)id的組件上。因為系統(tǒng)沒有對應(yīng)的布局文件可用,我們可以自己定義一個布局文件。在本文檔中我們用TextView和ImageView組合來進(jìn)行布局以演示SimpleAdapter的用法。布局效果如下圖:tools:context=".MainActivity">tools:context=".MainActivity">>MainActivity類代碼publicpublicclassMainActivityextendsActivityprivateListViewlv;{super.onCreate(savedInstanceState);lv=(ListView)findViewById(R.id.lv);List<Map<String,Object>>list=newArrayList<Map<String,Object>>();Map<String,Object>map=newHashMap<String,Object>();map.put("icon",R.drawable.ic_launcher);map=newHashMap<String,map.put("text",map=newHashMap<String,map.put("text""廣州");map=newHashMap<String,Object>();map.put("text",map=newHashMap<String,map.put("text""杭州");SimpleAdapter第一個參數(shù)Context第二個參數(shù)dataidListView第四個參數(shù)String[]定義得Map中keyintidkeySimpleAdaptermyAdapter=newSimpleAdapter(this,list,newString[]{"icon","text"},newint[]{R.id.iv_icon,R.id.tv_text});}}Listview優(yōu)化Listview是重中之重,無論面試和工作,都常會涉及。具體如何優(yōu)化,上邊介紹的很ConvertViewxml減少如果只涉及到一個Item的某一個控件的更改,不應(yīng)該去刷新整個而是給這個控件使用setTag(Position)的方式設(shè)置不同的tag,然后使用ListView.findViewByTag,找到這個對應(yīng)的控件進(jìn)行更改(什么時候需要使用分批分頁加載當(dāng)然還有一些其他優(yōu)化,我在這里就不做闡述,可以自己去研究。適配器BaseAdapterListview優(yōu)化Android中的框Androd中常用的框有通知框、列表框、單選框、多選框以及其表選以由AertDilog.Buider建,進(jìn)度框由ProgressDilog創(chuàng)建。 設(shè)置框標(biāo)題欄左側(cè)的那個圖 設(shè)置框標(biāo)題欄的提示信 設(shè)置框主體部分的提示信 設(shè)置框在點擊返回鍵時是否會關(guān) 下面將通過案例分別介紹這五種框的用法。:為了方便演示,在這里需要創(chuàng)建一個新工程,工程名叫《框》。該工程的主界面有五個按鈕,這五個按鈕綁定了分別調(diào)用其對應(yīng)框的函數(shù),點擊不同的按鈕在其對應(yīng)的函數(shù)里展示不同的框。因此下面的操作默認(rèn)都是在該工程中實現(xiàn)的。該工程的布局文件如下通知框使用Builder創(chuàng)建,一般都會有個確認(rèn)和取消按鈕。當(dāng)通知框提示的信息是要求用戶必須且必須做出確定或者取消的選擇的時候,需要設(shè)置setCancelable屬性為false(默認(rèn)true),以防止用戶直接使用返回鍵關(guān)閉框。notifyDialog()方法代碼publicpublicvoidnotifyDialog(ViewBuilderbuilder=newBuilder(this); ,{publicvoidonClick(DialogInterfacedialog,intwhich){},{publicvoidonClick(DialogInterfacedialog,intwhich){} }列表框使用Builder來創(chuàng)建,只需調(diào)用Builder對象的setItems方法設(shè)置要展示}單選框使用Builder來創(chuàng)建,只需調(diào)用Builder對象的setSingleChoiceItems方 itemsintcheckedItemfinalOnClickListenerlistener)//選中選項觸發(fā)的點擊publicpublicvoidsingleDialog(ViewBuilderbuilder=newBuilder(this);finalString[]languages=new*器builder.setSingleChoiceItems(languages,0,newOnClickListener()publicvoidonClick(DialogInterfacedialog,int{Stringlanguage="+language,0).show();},{publicvoidonClick(DialogInterfacedialog,intwhich),}publicpublicvoidonClick(DialogInterfacedialog,intwhich),}}:該種類型的框在點擊選項的時候Toast即輸出您點擊的條目,但是此時該目后框自動就。多選框使用Builder來創(chuàng)建,只需調(diào)用Builder對象的setMultiChoiceItems方法,setMultiChoiceItems(CharSequence[]items,//要展示的多選列表項finalOnMultiChoiceClickListenerlistener)//點擊,}}的框builder.setPositiveButton("確定"}框了消息機(jī)制Handler來進(jìn)行處理,所以它可以直接在子線程中進(jìn)行修改,無需再單獨設(shè)置Handler來修改UI。}}}}至此,常見的框都已經(jīng)演示完畢!當(dāng)然還有其他的一些框創(chuàng)建通知Toast.makeText(Contextcontext,CharSequencetext,intduration)Toast.makeText(Contextcontext,intresId,intduration)創(chuàng)建通知通過構(gòu)造函數(shù)創(chuàng)建:Notification(inticon,CharSequencetickerText,icon:通知的資源when:時間 ode,Intentintcontext ode:請求碼intentflagsPendingIntent中提供了常量選擇設(shè)置通知點擊調(diào)用Notification對象方法:setLatestEventInfo(Contextcontext,CharSequencecontentTitleCharSequencecontentTextPendingIntentcontextcontentTitle:標(biāo)題contentText:內(nèi)容contentIntent設(shè)置通知點擊后清除Notification對象屬性n.flagsc獲取系統(tǒng)通知服務(wù) tytmS發(fā)送消息Id是這個通知的id,如果id一樣,則只能發(fā)送一次通知具體代Notificationn=Notificationn=newNotification(R.drawable.feq," PendingIntentpi=PendingIntent.getActivity(this, newResultActivity.class),PendingIntent.FLAG_ONE_SHOT);n.setLatestEventInfo(this," 完成","FeiQ.exe n.flags=Notification.FLAG_AUTO_CANCEL;manager.notify(0,n);框知識點重點ctiviy,彈出框時,生命周期方法:onpaue()、onReume()方法不會執(zhí)行因為框是ctvty的一部分。所以:構(gòu)造框的Builder(context),這個context是指定這個框掛載在哪activity獲取的是子類的activity,當(dāng)前activity的因為getApplicationContext獲取的是父類的activity一般情況:可以用activity.this.代替activitydestorygetApplicationContextgetContext();測試框架類里獲取上下文,獲取到的是一個虛模擬的虛上下文dialog.setView();//根據(jù)View來顯示框那么就創(chuàng)建view相對應(yīng)的layot文件取消:dialog.dismiss()或者dialog.cancle()內(nèi)部調(diào)用*框publicvoidshowSetupPwdDialog()AlertDialog.Builderbuilder=newfinalViewview=View.inflate(this,R.layout.dialog_setup_pwd,//需要顯示創(chuàng)建dialog(一般調(diào)用show時,會先判斷有木有 finalAlertDialogdialog=Buttonbtn_confirm=(Button)view.findViewById(R.id.btn_dialog_confirm);Buttonbtn_cancle=(Button)view.findViewById(R.id.btn_dialog_cancle);{publicvoidonClick(Viewv)StringToast.makeText(getApplicationContext(),"和再次不能為空",Toast.LENGTH_SHORT).show();return}t(),"兩次必須一致",return}Editoredit=sp.edit();}{publicvoidonClick(View{}}框的layoutActivityToast通知如何顯示任意時長 Toast?這個工作中也會碰到這樣的需求////顯示任意時長的privatevoidlowAnyTimeToastAnyTimeToast.makeText(mContextwarnMsg);lowAnyTimeToast.show(60);//toast顯示時長}}如何解決Toast在我們做項目時,有時會用到Toast來給用戶提示某些信息,可當(dāng)用戶時,連續(xù)重復(fù)的操作就會讓Toast不停的在頁面上顯示,很是影響用戶體驗。解不用計算Toast的時間之類的,就是定義一個全局的成員變量Toast,這個Toast不為null的時候才去make,否則直接setText.為了按返回鍵后立即使ToastActivity的onBackPressedcancel你的Toast即可.通知框這個框用的會最多,但是其他的了解會用即可。通知 通知、狀態(tài)欄通知用的比較多需要掌握。自定義框有很多公司會要求不同風(fēng)格的框,所以需要自定義框。需要掌握在本章節(jié)中我們將用介紹ProgressBar、Spinner pleteTextView:為了便于演示我們新創(chuàng)建一個項目,項目名《常用控件》。使用默認(rèn)的布局文件和默認(rèn)的Activity類。tools:context=".MainActivity">"進(jìn)度條<!--android:maxandroid:progress下拉列表框<!--android:entriesandroid:text="自動提示文本 <!--pletionThreshold21也 android:text="多個自動提示文本 <!--pletionThresholdpletionThreshold21也 :在上面布局文件中Spinner控件有個比較特殊的屬性需要引入外部文件。加的字符串常量,作為Spinner<?<?xmlversion="1.0"encoding="utf-<string<string o<string-array MainActivity代碼如下importimportandroid.os.Bundle;importandroid.view.View;importimportimportimportandr importandroid.w importandroid.widget.ProgressBar;importimportpublicclassMainActivityextends{privateProgressBarprivateSpinner pleteTextView pleteTextView{super.onCreate(savedInstanceState);*progressBar=(ProgressBar)findViewById(R.gressBar);auto_tv=( pleteTextView)findViewById(R.id.auto_tv);multi_tv=( spinner=(Spinner)findViewById(R.id.spinner);*給spinner綁定選 *第三個參數(shù)positionpublicvoidonItemSelected(AdapterView<?>parent,Viewview,intlongid)
StringStringcity=(String)spinner.getItemAtPosition(position);Toast.makeText(MainActivity.this您選擇的是:city0).show();}*publicvoidonNothingSelected(AdapterView<?>{,"",}StringbooksnewString[]{"JavaScript網(wǎng)頁開發(fā)","Android源碼分析","深入理解JVM","Android-隨堂筆記","Android-面試寶典","JavaEE"};ArrayAdapter<String>ArrayAdapter<String>adapter=}*voidshowProgressBar()newThread(newRunnable()publicvoidrun()while(true)for(inti=0;i<100;i++)}}}}}進(jìn)度條進(jìn)度條,與進(jìn)度框有著類似的功能,也可以直接在子線程中控制其進(jìn)度的改變。同的是進(jìn)度條一般嵌入在我們自定義的布局文件中,而進(jìn)度框則單獨占據(jù)一個布局(該布局系統(tǒng)自帶提供)。下拉列表框ViewGroupAndroidAdapter自動提示文本 pleteTextViewEditText 多個自動提示文本 pleteTextView只能提示一次, pleteTextView使用不是很合適, pleteTextView.setTokenizer方法為此控件設(shè)置一個值與值之間的分 pleteTextView類似。Android中的樣式和fontColor、fontSize、layout_width、layout_heightXML文件中,并設(shè)置樣式的名稱。AndroidStyleCSS渲染Button控件的顯示效果。我們新創(chuàng)建一個Android工程,工程名稱《樣式和》。直接使用默認(rèn)布局文件和默認(rèn)Activity類。打開工程中res->values->styles.xml<<style<item<item<item<item <stylename="btn_style_child"<item在默認(rèn)布局文件中使用上面的自定義樣式。我們只需在如下布局文件中給一個stye屬性,那么所有屬性都會作用在該Button上tools:context=".MainActivity">android:text="Android中的樣式 "</Lar的定義與樣式的定義相同,都是定義在styles.xmlparent屬性來繼承一個父樣式,不同之處在于是作用在Activity上的通過定義AndroidManifest.xml文件中的<application>和<activity>節(jié)點下的”android:theme”屬性作用在整個應(yīng)用或者某個Activity,對整個應(yīng)用或某個Activity進(jìn)行全局性影響。如果一個應(yīng)用使用了,同時應(yīng)用下的view也使用了樣式,android系統(tǒng)也定義了一些主題,例如:<activity題,可以在文檔的reference-->android-->R.style中查看。繼續(xù)使用本文檔11.1中創(chuàng)建的工程。在res->values->styles.xml<style<!--window<item<!--window<stylename="them_noTitle_full"<item在AndroidManifest.xml中給添加樣式,如下圖黃色部分<!--<!--applicationactivity都適用<!--在activity中引 則當(dāng)前Activity適用--android:label="@string/app_name"><category也可以在Activity類中通過JavapublicpublicclassMainActivityextendsActivity{super.onCreate(savedInstanceState);//Activity}} 以上代碼中設(shè)置的是全屏功能,那么全屏通過代碼如何設(shè)置:activity中直接調(diào)用工作中會經(jīng)常用到樣式和,能看懂 后會修改即可Android實現(xiàn)的英文單詞是Internationalization,因為這個單詞太長了,有時也簡稱為I,18N后一個字母。所以,I18N也就是的意思。Android程序,也就是程序可以根據(jù)系統(tǒng)所使用的語言,將界面中的文字翻譯成與之對應(yīng)的語言。這樣,可以讓程序更加通用。Android可以通過資源文件非常方便的實現(xiàn)程序的。12.1Android在編寫Android項目時,通常都是將程序中要使用的字符串資源放置在res/values目錄下的strings.xml文件中,為了給這些字符串資源實現(xiàn),可以在Android項目的res下,創(chuàng)建對應(yīng)于各個語言的資源文件夾(例如,為了讓程序兼容簡體中文、繁體中 、values-zh-rTW和values-en-rUS的文件夾),然后在每個文件夾中創(chuàng)建一個對應(yīng)的strings.xml文件,并在該文件中定義對也可以進(jìn)行,同字符串的類似,只需根據(jù)程序要兼容的語言版本,分別 ,drawable-zh-rTW這樣的文件夾,將資源存放在文12.2.示下面通過一個案例來演示的使用方法在res文件下分別創(chuàng)建 下創(chuàng)建strings.xml文件。 /settings.xml添加內(nèi)容如下<?<?xmlversion="1.0"encoding="utf-<string<string 給values-zh-rTW/settings.xml<?<?xmlversion="1.0"encoding="utf-<string 在res文件下分別創(chuàng)建 和drawable-zh-rTW文件夾,向里面各自添加一個flag.jpg的。第一個為為五星、第二個為白日旗。的名字tools:context=".MainActivity"> o_world"設(shè)置模擬器的語言為簡體中文 -12.3 在android3.0中又引入了一個新的動畫系統(tǒng):propertyanimation,這三種動畫模式在SDK中被稱為propertyanimation,viewanimation,drawableanimation。在本文檔中只介紹tweenanimation和frameanimation。FrameAnimation(幀動畫):創(chuàng)建一個Drawable序列,這些Drawable可以按照指定的時間間隔一個一個的顯示,也就是順序事先做好的圖像TweenAnimation(漸變動畫):通過對特定的對象做圖像變換如平移、縮放、旋轉(zhuǎn)、淡出/淡入等產(chǎn)生動畫效果。幀動畫DrawableAnimation(FrameAnimation):幀動畫,就像GIF,通過一系下面通過一個案例來演示幀動畫的使用方法。新創(chuàng)建一個工程《Android將準(zhǔn)備好的文件放到res/drawable- 中如果大家缺乏資源可以隨便放進(jìn)去幾張就行,只要起到練習(xí)代碼的作用就行在項目的res下創(chuàng)建文件夾drawable,然后在文件夾下面定義動畫XML文件,文件名稱可以自定義(AnimationDrawable效果),這里給改xml文件起名為frame_anim.xml。xmlanimation-list>,可以在此根節(jié)點中設(shè)置在根節(jié)點<animation-list>下為幀動畫的每幅圖片添加一個<item>節(jié)點,節(jié)點的”android:drawable”屬性是的資源id,”android:duration”屬性指定展示的時間(一般每秒展示5-8張就可以感受到動畫的效果)。<<itemandroid:drawable="@drawable/a2" item不再展 編寫默認(rèn)的ActivitypublicpublicclassMainActivityextendsActivityprivateImageView{super.onCreate(savedInstanceState);iv=(ImageView)findViewById(R.id.iv);animationDrawable= }publicvoidstartAnimation(Viewview){//}}:在動畫start()之前要先stop(),不然在第一次動畫之后會停在最后一幀,這樣動最后一點是SDK中提到的,不要在onCreate中調(diào)用start,因為AnimationDrawable還沒有完全跟Window相關(guān)聯(lián),如果想要界面顯示時就開始動畫的話,可以在onWindowFoucsChanged()中調(diào)用start()。漸變動畫漸變包括:包括平移、縮放、旋轉(zhuǎn)、改變動畫效果的定義可以采用XML來做也可以采用java代碼來做。補間動畫有4Animation: 指定重復(fù)的模式(如:反轉(zhuǎn) ImageView: startAnimation(Animationa)讓ImageViewAlpha漸變動畫漸變動畫在代碼中使用的是AphAnimation類來定義,在XML文件中使用<apha>節(jié)點來定義。XMLJavaAlpha用本文檔13.1章節(jié)中的工程。使用XML文件實現(xiàn)Alpha在 下創(chuàng)建anim文件在anim文件夾中創(chuàng)建alpha_anim.xml編輯alpha_anim.xml文件,文件如下<?<?xmlversion="1.0"encoding="utf-<alphaxmlns:android="http://s>JavaAnimationUtilsxmlstartAnimationImageViewpublicvoidstartAlphaAnimation(ViewAnimationanimation=AnimationUtils.loadAnimationpublicvoidstartAlphaAnimation(ViewAnimatio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源環(huán)保行業(yè)顧問工作總結(jié)
- 【八年級下冊歷史】單元測試 第四、五、六單元綜合測試卷
- 2024消防培訓(xùn)的心得體會(32篇)
- 農(nóng)村自建房合同(2篇)
- 初級會計勞動合同(2篇)
- 湖北省宜昌市外國語初級中學(xué)2025屆中考生物五模試卷含解析
- 建設(shè)緊固件電商孵化基地項目建議書立項備案審批
- 2025旺鋪租約轉(zhuǎn)讓合同模板
- 2025關(guān)于公司的借款合同
- 2024年度天津市公共營養(yǎng)師之二級營養(yǎng)師題庫附答案(典型題)
- 2024年回遷房買賣合同樣本(5篇)
- 《大數(shù)據(jù)技術(shù)原理與應(yīng)用(第3版)》期末復(fù)習(xí)題庫(含答案)
- 項目15-1 蛋黃中免疫球蛋白的提取
- MOOC 中國哲學(xué)經(jīng)典著作導(dǎo)讀-西安交通大學(xué) 中國大學(xué)慕課答案
- 醫(yī)院培訓(xùn)課件:《痞滿(少陽太陰合病)患者中醫(yī)個案護(hù)理》
- 泌尿外科抗菌藥物臨床應(yīng)用規(guī)范
- 廠區(qū)綠化養(yǎng)護(hù)方案及措施
- JJG 633-2024 氣體容積式流量計
- 2023年河北中煙工業(yè)有限責(zé)任公司筆試試題及答案
- 物質(zhì)與意識的辯證關(guān)系
- 小學(xué)英語考試教師總結(jié)反思8篇
評論
0/150
提交評論