版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android用戶界面(3)6.4 相對(duì)布局(P56)空間的位置描述為相對(duì)于父容器位置,或者相對(duì)于其他控件的位置。比如可以先指定一個(gè)控件 A 位于父容器中心,然后其他控件的位置可以指定為在 A 下方,和A 左對(duì)齊,或在A 右邊,和A上對(duì)齊,等用作參照物的控件要先寫相對(duì)布局(RelativeLayout)是一種非常靈活的布局方式,能夠通過(guò)指定界面元素與其他元素的相對(duì)位置關(guān)系,確定界面中所有元素的布局位置特點(diǎn):能夠最大程度保證在各種屏幕類型的手機(jī)上正確顯示界面布局6.4 相對(duì)布局控件常用屬性(xml中使用):layout_centerHorizontal = “true” 在容器中水平居中l(wèi)ayo
2、ut_centerVertical = “true” 在容器中垂直居中l(wèi)ayout_alignParentLeft = “true”在容器中靠左邊layout_alignParentTop = “true”在容器中靠上邊.layout_toRightOf = “”id/view01“ 在 view01 的右邊layout_toLeftOf = “”id/view01“ 在 view01 的左邊android:layout_below=“id/view01”在 view01 的下邊android:layout_alignLeft=“id/view01” 和 view01 左對(duì)齊android:l
3、ayout_above=“id/view01”在 view01 的上邊.6.4 相對(duì)布局右圖比課本上程序多加了:padding 是設(shè)置控件內(nèi)部文字到邊緣的距離,四個(gè)方向都一樣。設(shè)置單個(gè)方向的,可以用 paddingLeft, paddingTop等。在java中用 setPadding或setPaddingLeft 等6.5 絕對(duì)布局內(nèi)部的空間都具體指明了絕對(duì)位置(相對(duì)于布局左上角的坐標(biāo)),程序適應(yīng)性差7 界面控件Android系統(tǒng)的界面控件分為定制控件和系統(tǒng)控件定制控件是用戶獨(dú)立開(kāi)發(fā)的控件,或通過(guò)繼承并修改系統(tǒng)控件后所產(chǎn)生的新控件。能夠?yàn)橛脩籼峁┨厥獾墓δ芑蚺c眾不同的顯示需求方式系統(tǒng)控件是A
4、ndroid系統(tǒng)提供給用戶已經(jīng)封裝的界面控件。提供在應(yīng)用程序開(kāi)發(fā)過(guò)程中常見(jiàn)功能控件。系統(tǒng)控件更有利于幫助用戶進(jìn)行快速開(kāi)發(fā),同時(shí)能夠使Android系統(tǒng)中應(yīng)用程序的界面保持一致性常見(jiàn)的系統(tǒng)控件包括TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHost7.1 TextView和EditTextTextView是靜態(tài)文本,也可以通過(guò)指定其 background 屬性來(lái)指定背景圖,或背景邊框:android:background=drawable/icon“可以指定其 drawableLeft
5、或 drawableRight,drawableTop,drawBottom 等屬性來(lái)在左右或上下顯示圖片。android:drawableLeft=drawable/icon”例子見(jiàn) P64可以指定其 autoLink屬性,使之成為一個(gè)鏈接(P62):android:autoLink = “email”android:autoLink = “web”7.2 TextView和EditTextEditText 是從TextView 派生而來(lái)的,用于輸入文字。所以TextView能做的,EditText也能做,包括在左邊顯示圖片等。常用屬性(P61):android:selectAllOnFoc
6、us=“true” 獲得輸入焦點(diǎn)時(shí),自動(dòng)選中全部?jī)?nèi)容android:hint = “請(qǐng)輸入姓名” 在空的編輯框中顯示:“請(qǐng)輸入姓名”android:password = “true” 密碼方式顯示輸入的文字 android:phoneNumber = “true” 獲得輸入焦點(diǎn)時(shí),自動(dòng)彈出數(shù)字鍵盤7.2 TextView和EditTextandroid:text = “abcd” 開(kāi)始時(shí)顯示的文字程序中獲取EditText中輸入的文字的方法:EditText ed = (EditText)findViewById(R.id.xxx);String s = ed.getText().toStri
7、ng();程序中設(shè)置EditText中的文字的方法:ed.setText(“hello”);監(jiān)聽(tīng)EditText中的輸入 final txtView = (TextView)findViewById(R.id.xxx); editText = (EditText)findViewById(R.id.YYY); editText.addTextChangedListener(new TextWatcher() Override public void afterTextChanged(Editable s) Override public void beforeTextChanged(CharS
8、equence s, int start, int count, int after) Override public void onTextChanged(CharSequence s, int start, int before, int count) txtView.setText(s.toString(); /txtView內(nèi)容總是保持和editText一致 );7.3 Button和ImageButtonImageButton上不能顯示文字,但可以同時(shí)指定底圖和底色src = “drawable/icon” 指定底圖background = “#ffffff” 指定底色Button上
9、可以同時(shí)顯示文字和圖片,但是顯示圖片時(shí),不能指定底色background = “drawable/icon” 指定底圖text = “xxxx” 指定文字7.3 Button和ImageButton要使得按鈕按下和彈起時(shí)圖片不一樣,需要使用背景選擇器 selector (P66)參考閱讀:/s/blog_4b93170a0100qhwa.htmldrawable 文件夾下 button_selector.xml (選擇器器)內(nèi)容:在Button中使用selector: android_background = “drawable/button_selector”在ImageButton中使用s
10、elector: android_src = “drawable/button_selector”在程序中指定按鈕的文字和selector:btNormal.setText(“fdfasdfasdf”); /假設(shè) btNormal是ButtonDrawable dr = getResources().getDrawable(R.drawable.button_selector);btNormal.setBackground(dr );ImageButton指定圖片:imageButton.setImageResource(R.drawable.XXX);更多的selector的設(shè)置: 9Pat
11、ch圖片作為按鈕背景(P68)SDK 4.2 可以直接運(yùn)行 draw9patch.exe,不用管 SwingWorker類參考閱讀:/post/129.html7.4 RadioButton和CheckBoxCheckBox是一個(gè)同時(shí)可以選擇多個(gè)選項(xiàng)的控件RadioButton則是僅可以選擇一個(gè)選項(xiàng)的控件RadioGroup是RadioButton的承載體,程序運(yùn)行時(shí)不可見(jiàn),應(yīng)用程序中可能包含一個(gè)或多個(gè)RadioGroup一個(gè)RadioGroup包含多個(gè)RadioButton,在每個(gè)RadioGroup中,用戶僅能夠選擇其中一個(gè)RadioButton在xml文檔中,將RadioButton放在
12、RadioGroup中,可以有多個(gè)RadioGroup,互不相關(guān)。CheckBox和RadioButton都是從 Button派生而來(lái)的,所以Button的所有屬性和方法都適用于它們。它們都可以有一個(gè) android:checked屬性取值“true” 或“false” ,用來(lái)指明初始狀態(tài)是否是選中的7.4 RadioButton和CheckBox在程序中獲取是否選中的狀態(tài):radioButton.isChecked(); 返回值為 true或 falsecheckBox.isChecked(); 返回值為 true或 false在程序中改變選擇狀態(tài):radioButton.setCheck(
13、true); /使其選中,false則使其不選中checkBox.setCheck(true); /使其選中,false則使其不選中RadioButton響應(yīng)選擇動(dòng)作 RadioGroup rg = (RadioGroup)findViewById(R.id.XXX); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() public void onCheckedChanged(RadioGroup group, int checkedId) /checkedId 即為被選中的那個(gè) RadioButton
14、的 idif( checkedId = R.id.YYY ) /如果 R.id.YYY這個(gè)RadioButton被選中 );CheckBox 響應(yīng)選擇動(dòng)作 CheckBox ck = (CheckBox )findViewById(R.id.XXX); ck.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) / isChecked代表被點(diǎn)擊的CheckBox是否被選中
15、 /獲取被點(diǎn)擊的 CheckBox上的文字: String s = arg0.getText().toString(); );7.5 用同一個(gè)對(duì)象監(jiān)聽(tīng)多個(gè)事件源class MyListener implements CheckBox.OnCheckedChangeListener public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) switch(buttonView.getId() case R.id.ckBurger:break;case R.id.ckCoke:Log.i(ee,buttonV
16、iew.getText().toString();break;case R.id.ckChips:break; /Log.i 可以在 LogCat的 info里輸出調(diào)試信息7.5 用同一個(gè)對(duì)象監(jiān)聽(tīng)多個(gè)事件源int CheckBoxIds = R.id.ckBurger, R.id.ckCoke, R.id.ckChips ;CheckBox ckBoxs = new CheckBox3;MyListener listener = new MyListener();for(int k = 0; k 3; +k) ckBoxsk = (CheckBox)findViewById(CheckBoxI
17、dsk); ckBoxsk.setOnCheckedChangeListener(listener);7.6 用Activity作為監(jiān)聽(tīng)器監(jiān)聽(tīng)多個(gè)對(duì)象要訣:要讓Activity 實(shí)現(xiàn)監(jiān)聽(tīng)接口,在事件響應(yīng)函數(shù)里面,用事件源的getId 方法獲得事件源的id,就能知道事件發(fā)生在哪里。public class Homework1Activity extends Activity implements Button.OnClickListener, RadioGroup.OnCheckedChangeListener, CheckBox.OnCheckedChangeListener public v
18、oid onCreate(Bundle savedInstanceState) . button1.setOnClickListener(this); button2.setOnClickListener(this); radioGroup1.setOnCheckedChangeListener(this); checkBox1.setOnCheckedChangeListener(this); checkBox2.setOnCheckedChangeListener(this); public void onClick(View arg0) /arg0是事件源switch(arg0.getI
19、d() case R.id.button1:break;case R.id.button2;break; public void onCheckedChanged(CompoundButton arg0, boolean arg1) switch(arg0.getId() case R.id.checkBox1:break;case R.id.checkBox2;break; 7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果在一個(gè)Activity中啟動(dòng)另一個(gè)Activity,不需要返回結(jié)果:Intent intent = new Intent();/* 指定intent要啟動(dòng)的類 */inte
20、nt.setClass(MainActivity.this, Activity1.class);startActivity(intent);上面代碼出現(xiàn)在MainActivity的某個(gè)方法中,則能啟動(dòng)Activity1。MainActivity 也不會(huì)結(jié)束,而是被Activity1覆蓋,Activity1運(yùn)行結(jié)束則MainActivity重現(xiàn)。如果希望Activity1啟動(dòng)了MainActivity就結(jié)束,則加一條 :finish(); /結(jié)束當(dāng)前Activity7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果2) 在一個(gè)Activity中啟動(dòng)另一個(gè)Activity,并要取得新Activity
21、運(yùn)行的結(jié)果(如用戶輸入的字符串):Intent intent = new Intent();/* 指定intent要啟動(dòng)的類 */intent.setClass(MainActivity.this, Activity1.class);startActivityForResult(intent, XXXX);XXXX是個(gè)int 的變量或常量,用來(lái)代表所啟動(dòng)的Activity,相當(dāng)于新Activity 的某種id要取得返回結(jié)果,則 MainActivity不能 finish()7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果然后,在 MainActivity中需要寫 :protected void
22、 onActivityResult(int requestCode, int resultCode, Intent data)/新啟動(dòng)的Activity返回時(shí),此方法被調(diào)用 super.onActivityResult(requestCode, resultCode, data); /如果可能啟動(dòng)多個(gè)Activity,可以用requestCode來(lái)判斷是從哪個(gè)Activity返回的 if (requestCode = XXXX ) else if( requestCode = YYYY) 7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果新Activity結(jié)束時(shí)向啟動(dòng)它的Activity通過(guò)in
23、tent傳遞數(shù)據(jù):Intent intent = new Intent();intent.putExtra(“dataId1”,”aaaaaa”); /”aaaaaa”是要傳的數(shù)據(jù),此項(xiàng)數(shù)據(jù)的id是 “dataId1”intent.putExtra(“dataid2,123456);/123456是要傳的數(shù)據(jù),此項(xiàng)數(shù)據(jù)的id是”dataid2”Intent.putExtra( .); /還可以傳更多數(shù)據(jù)Intent.putExtra();setResult(9999, intent); /9999是返回結(jié)果,可以用于傳遞一個(gè)整數(shù)finish();7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果
24、老Activity獲取新Activity傳回的數(shù)據(jù):protected void onActivityResult(int requestCode, int resultCode, Intent data) super.onActivityResult(requestCode, resultCode, data); if (requestCode = XXXX ) if( data != null ) String s = data.getStringExtra(“dataId1);int n = data.getIntExtra(“dataId2,-1);/s = “aaaaaa”, n =
25、 123456, resultCode = 9999 else /無(wú)返回值,比如在 Activity1中用戶按了硬返回鍵 7.7 啟動(dòng)新Activity 并取得其運(yùn)行結(jié)果Activity 一定要在 AndroidManifest.xml中聲明,才能起作用,否則導(dǎo)致程序崩潰。 portrait: 規(guī)定界面必須是豎的landscape: 規(guī)定界面必須是橫著的不指定 screenOrientation 則界面會(huì)自動(dòng)調(diào)整橫豎。7.8 狀態(tài)開(kāi)關(guān)按鈕ToogleButton(P71)有開(kāi)和關(guān)兩種狀態(tài),可以分別對(duì)應(yīng)于不同的文字關(guān):開(kāi):7.8 狀態(tài)開(kāi)關(guān)按鈕ToogleButton(P71)toggle.set
26、OnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() /響應(yīng)點(diǎn)擊事件Overridepublic void onCheckedChanged(CompoundButton arg0, boolean arg1)if(arg1) /狀態(tài)是開(kāi)/設(shè)置LinearLayout垂直布局test.setOrientation(1);else/設(shè)置LinearLayout水平布局test.setOrientation(0); );7.8 狀態(tài)開(kāi)關(guān)按鈕ToogleButton(P71)程序中判斷ToogleButton是否是開(kāi)的:
27、 toggleButton.isChecked()7.9 圖像視圖 ImageView (P75)android:scaleType 屬性 規(guī)定圖片如何縮放或移動(dòng)以適應(yīng) ImageView的大小 android:scaleType = “fitCenter” imgView.setScaleType(ImageView.ScaleType.FIT_CENTER) setImageBitmap 方法設(shè)置圖片7.10 類似下拉列表框的Spinner控件其內(nèi)容有兩種生成方式1) 靜態(tài),在xml文件中指定 (P81)2) 在程序中動(dòng)態(tài)指定7.10.1 用ArrayAdapter在程序中動(dòng)態(tài)指定 spi
28、nner內(nèi)容List list = new ArrayList();Spinner sp = (Spinner) findViewById(R.id.Spinner1);list.(“string1”); list.add(“string2”); list.add(“string3”);ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list); /設(shè)置下拉列表的風(fēng)格adapter.setDropDownViewResource(android.R.layout.simple
29、_spinner_item);/ android.R.layout.simple_spinner_dropdown_item 則選項(xiàng)上有/圓點(diǎn)sp.setAdapter(adapter);/list中的項(xiàng)目成為sp中的選項(xiàng)7.10.2 Spinner響應(yīng)選擇事件spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() Overridepublic void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) /An Adap
30、terView is a view whose children are determined by an Adapter. Spinner 是AdapterView模版類的派生類 / arg0是事件源 arg2 是被選中項(xiàng)的位置(從0開(kāi)始), arg3 是其idtxtResult.setText(TextView)arg1).getText() + , + String.valueOf(arg2) + , + String.valueOf(arg3);Overridepublic void onNothingSelected(AdapterView arg0) );7.10.3 修改Spin
31、ner的內(nèi)容通過(guò)修改 Spinner的數(shù)據(jù)源,來(lái)修改Spinner中顯示的選項(xiàng)List list = new ArrayList();Spinner sp = (Spinner) findViewById(R.id.Spinner1);ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);sp.setAdapter(adapter);/list中的項(xiàng)目成為sp中的選項(xiàng)adapter.addItem(“abc”); /將選項(xiàng)“abc”添加進(jìn)spinnerint c = sp.getCount(); /取選項(xiàng)數(shù)目for( int i = 0;i c; + i ) /在每個(gè)項(xiàng)目的文字末尾加 “_0”list.set(i, list.get(i) + _0); adapter.notifyDataSetChanged(); /通知sp,數(shù)據(jù)已改,應(yīng)刷新m7.10.4 其他Spinner方法 String s = (String)sp.getIt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人車輛作為抵押物債務(wù)結(jié)算合同4篇
- 2025年度消費(fèi)者權(quán)益保護(hù)普法合同履行與市場(chǎng)監(jiān)管協(xié)議4篇
- 二零二五版美容美發(fā)產(chǎn)品原料綠色采購(gòu)與環(huán)保責(zé)任合同2篇
- 直播電商在2025年的市場(chǎng)格局
- 二零二五年度林業(yè)苗木冷鏈物流配送合同2篇
- 課題申報(bào)參考:明代徽州心學(xué)研究
- 2025年度個(gè)人消防工程勞務(wù)合同范本2篇
- 二零二五山地承包合同書(shū):山地生態(tài)保護(hù)與可持續(xù)發(fā)展合作框架2篇
- 二零二五年度新能源儲(chǔ)能技術(shù)投資入股合同-@-1
- 二零二五年度大型會(huì)議活動(dòng)場(chǎng)地租賃合同4篇
- 環(huán)境監(jiān)測(cè)對(duì)環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競(jìng)賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫(kù)及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動(dòng)物城》中英文對(duì)照(全本臺(tái)詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級(jí)語(yǔ)文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
- 安徽省物業(yè)服務(wù)標(biāo)準(zhǔn)
- 勾股定理的歷史與證明課件
評(píng)論
0/150
提交評(píng)論