![CU3-AndroidUI開發(fā)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/90245f45-53c1-4ee9-8eea-73f97e25adcc/90245f45-53c1-4ee9-8eea-73f97e25adcc1.gif)
![CU3-AndroidUI開發(fā)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/90245f45-53c1-4ee9-8eea-73f97e25adcc/90245f45-53c1-4ee9-8eea-73f97e25adcc2.gif)
![CU3-AndroidUI開發(fā)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/90245f45-53c1-4ee9-8eea-73f97e25adcc/90245f45-53c1-4ee9-8eea-73f97e25adcc3.gif)
![CU3-AndroidUI開發(fā)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/90245f45-53c1-4ee9-8eea-73f97e25adcc/90245f45-53c1-4ee9-8eea-73f97e25adcc4.gif)
![CU3-AndroidUI開發(fā)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/90245f45-53c1-4ee9-8eea-73f97e25adcc/90245f45-53c1-4ee9-8eea-73f97e25adcc5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機科學與技術系計算機科學與技術系顏德彪顏德彪AndroidAndroid應用開發(fā)應用開發(fā)Unit Outline單元名稱:Android UI開發(fā)課時:12單元項目:Chapter03UIChapter03UI主要內容:UI布局常用控件的使用菜單與導航Adapter與Adapter控件Lecture 1ViewView與布局與布局內容提要View與ViewGroupAndroid基本布局View與ViewGroupv 一個Android應用的界面是由View和ViewGroup對象構建的。所有UI組件都繼承自View類v 大部分UI組件都放在android.widget、android.v
2、iew及其子包中v ViewGroup是View的子類,即可作為View使用,也可向其中添加View基本布局LinearLayoutv 線性布局v android:orientation=vertical 垂直布局 每行僅包含一個界面元素v android:orientation=horizontal 水平布局 每列僅包含一個界面元素基本布局LinearLayoutv android:layout_gravity 指定子元素在LinearLayout中的對齊方式v android:layout_weight 指定子元素在LinearLayout中所占的權重v android:gravity 設
3、定Layout中元素的對其方式v android:layout_heightandroid:layout_width fill_parent 寬度或高度與父容器相同 match_parent 與fill_parent完全相同,從Android2.2以后推薦使用此屬性 wrap_content 組件的大小剛好包裹它的內容即可基本布局RelativeLayoutv 相對布局v 利用控件之間的相對位置關系來進行布局v 控件與父容器、控件與其他控件之間的相對關系基本布局RelativeLayout基本布局RelativeLayout如何實現(xiàn)如下UI界面?基本布局FrameLayoutv 框架布局 框架
4、布局(FrameLayout)是最簡單的界面布局,是用來存放一個元素的空白空間,且子元素的位置是不能夠指定的,只能夠放置在空白空間的左上角 如果有多個子元素,后放置的子元素將遮擋先放置的子元素 使用Android SDK中提供的層級觀察器(Hierarchy Viewer)進一步分析界面布局 層級觀察器能夠對用戶界面進行分析和調試,并以圖形化的方式展示樹形結構的界面布局基本布局FrameLayoutv 框架布局 android:gravity屬性是對該view 內容的限定. 以button為例,android:gravity=“right”則button上面的文字靠右。 android:lay
5、out_gravity 是用來設置該view相對與父view 的位置。比如一個button 在linearlayout里,你想把該button放在靠左、靠右等位置就可以通過該屬性設置。基本布局AbsoluteLayoutv 絕對布局 絕對布局(AbsoluteLayout)能通過指定界面元素的坐標位置,來確定用戶界面的整體布局 絕對布局是一種不推薦使用的界面布局,因為通過X軸和Y軸確定界面元素位置后,Android系統(tǒng)不能夠根據(jù)不同屏幕對界面元素的位置進行調整,降低了界面布局對不同類型和尺寸屏幕的適應能力。Layout_x 控制組件X坐標,Layout_y 控制組件y坐標。基本布局TableL
6、ayoutv 表格布局,配合TableRow使用,表示表格的一行,TableRow內有N個控件,表示有N列,TableRow繼承自LinearLayout,故每一行都是水平放置?;静季諸ableLayoutv 全局屬性 android:stretchColumns 設置可伸展的列(設置某列可拉伸)。該列可以向行方向伸展,最多可占據(jù)一整行。 android:shrinkColumns 設置可收縮的列。當該列子控件的內容太多,已經擠滿所在行,該子控件的內容將往列方向顯示。 android:collapseColumns 設置要隱藏的列。v 單元格屬性 android:layout_column
7、指定該單元格在第幾列顯示 android:layout_span 指定該單元格占據(jù)的列數(shù)(未指定時,為1)基本布局GridLayoutv 類似于表格布局,是Android 4.0及以上版本新增加的布局v 使用虛細線將布局劃分為行、列和單元格,也支持一個控件在行、列上都有交錯排列v 分為水平和垂直兩種方式,默認是水平布局,一個控件挨著一個控件從左到右依次排列v 指定android:columnCount設置列數(shù)的屬性后,控件會自動換行進行排列基本布局GridLayoutv 指定某控件顯示在固定的行或列,只需設置該子控件的android:layout_row和android:layout_colu
8、mn屬性即可,計數(shù)從0開始v 設置某控件跨越多行或多列,只需將該子控件的android:layout_rowSpan或者layout_columnSpan屬性設置為數(shù)值,再設置其layout_gravity屬性為fill即可,前一個設置表明該控件跨越的行數(shù)或列數(shù),后一個設置表明該控件填滿所跨越的整行或整列。基本布局GridLayoutandroid:layout_gravity=“fill“android:layout_rowSpan=“3”跨越3行跨越3列練習UI布局練習Lecture 2AndroidAndroid常用控件常用控件內容提要TextView、EditTextImageView
9、、ImageButtonButton、RadioButton、CheckBoxProgressBarSeekBar、RatingBarTextViewv TextView是一種用于顯示字符串的控件v 重要屬性: android:layout_width=“fill_parent“ android:layout_height=wrap_content“ android:lines=“2“ 高度2行 android:text=string/hello“ android:textSize=50sp /v textView超鏈接: android:autoLink屬性值 all: 所有連接有效,如we
10、b、phone、email等EditTextv EditText是一個具有編輯功能的TextView,是用來輸入和編輯字符串的控件。v 重要屬性: android:hint=請輸入內容“ android:inputType=phone android:drawableLeft=drawable/iconv 子控件AutoCompleteTextView: 自動完成文本框,它繼承自EditText,可以根據(jù)用戶輸入的文本彈出一個智能提示的下拉列表,這樣用戶便可以選擇相應的選項。ImageView及其子類v ImageView:用于在頁面中顯示圖片(圖片的瀏覽)。v 常用屬性 v imageVie
11、w詳解 http:/ ImageButton:圖片按鈕,繼承自ImageView。v 常用屬性 v ImageButton單擊切換按鈕圖片效果的實現(xiàn) http:/ drawableLeft屬性,會把圖片放在按鈕的最左側,使用paddingLeft即可調整到想要的位置。 v 當然,如果需要右圖左文字,上圖下文字,下圖上文字,也可以的,分別使用drawableRight, drawableTop, drawableBottom屬性即可RadioButtonv 單選按鈕v 配合RadioGroup使用,表示一組單選按鈕v 為RadioGroup設置OnCheckedChangeListener事件監(jiān)
12、聽,監(jiān)聽單選按鈕的變化CheckBoxv 多選按鈕v 設置OnCheckedChangeListener事件監(jiān)聽ToggleButtontoggleButton.setChecked(false);toggleButton.setOnClickListener(new OnClickListener() ;v 狀態(tài)開關按鈕,常用于表示開-關場景中v 為ToggleButton設置setOnClickListener事件監(jiān)聽ProgressBarv 進度條v 默認為圓形進度條(大、中、小)v 通過設置style屬性更改為水平進度條 style=android:style/Widget.Progr
13、essBar.Horizontal“ style=“?android:attr/progressBarStyleHorizontal“(等價)v 改變進度條的外觀 android:progressDrawable=drawable/my_bar android:indeterminateDrawable=drawable/progress_imageSeekBarv 拖動條v 設置OnSeekBarChangeListener,監(jiān)聽拖動事件 RatingBarv 星級評分條v 設置OnRatingBarChangeListener,監(jiān)聽評分變化常用控件用法總結vTextView EditTex
14、tTextView主要用來顯示字符串信息,可用setText()方法更改內容EditText用來讓用戶輸入內容的控件v ImageView ImageButton ImageView 主要展示圖片 注意scaleType屬性取值 ImageButton 圖片按鈕v RadioButton CheckBox 注意兩者的Listener所屬的上層類名 RadioGroup.OnCheckedChangeListener CompoundButton.OnCheckedChangeListener常用控件用法總結vButton ToggleButton二者監(jiān)聽的Listener相同,都是View.O
15、nClickListenerToggleButton需要判斷是否選中 isChecked()vProgressBar SeekBarProgressbar 主要用于顯示后臺工作進度,后臺改變progress值Seekbar 供用戶拖動滑塊改變progress,添加事件監(jiān)聽即可獲取當前進度vRatingBar評分使用三個屬性 numStars rating stepSize(一般是1或者0.5)事件監(jiān)聽獲取當前分值練習常用控件使用Lecture 3對話框對話框內容提要AlertDialogProgressDialogDatePickerDialogTimePickerDialog自定義對話框對話
16、框v AlertDialog:功能最為豐富,實際應用最為廣泛的對話框。v ProgressDialog:進度對話框,是對簡單進度條的封裝。v DataPickerDialog:日期選擇對話框。v TimePickerDialog:時間選擇對話框。v 自定義對話框:對話框布局自定義,并設置監(jiān)聽事件v 參考網頁v http:/ AlertDialog生成的對話框分為4個區(qū)域:圖標區(qū)、標題區(qū)、內容區(qū)和按鈕區(qū)。圖標區(qū)標題區(qū)內容區(qū)按鈕區(qū)AlertDialogv 創(chuàng)建對話框的步驟: 使用AlertDialog.Builder創(chuàng)建對象 調用AlertDialog.Builder的setTitle()或set
17、CustomTitle()方法設置標題。 調用AlertDialog.Builder的setIcon()方法設置圖標 調用AlertDialog.Builder的相關設置方法設置對話框內容 調用AlertDialog.Builder的setPositiveButton、setNegativeButton()或setNeutralButton()方法添加多個按鈕 調用AlertDialog.Builder的create()方法創(chuàng)建AlertDialog對象,再調用AlertDialog對象的show()方法將該對話框顯示出來。AlertDialogDialog dialog = new Aler
18、tDialog.Builder(this).setIcon(android.R.drawable.btn_star).setTitle(喜好調查).setMessage(你喜歡李連杰的電影嗎?).setPositiveButton(很喜歡, new DialogInterface.OnClickListener() .).setNegativeButton(不喜歡, new DialogInterface.OnClickListener() .).setNeutralButton(一般, new DialogInterface.OnClickListener() .).create();dia
19、log.show();AlertDialog的內容v 設置單選列表 setSingleChoiceItems(CharSquerence a, int b, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) .);v 設置多選列表 setMultiChoiceItems(CharSquerence a, boolean b,OnClickListener listener)v 設置普通列表 setItems(CharSquerence a,OnClickLis
20、tener listener)v 設置自定義視圖 setView(View v)單選對話框AlertDialog.Builder(this).setTitle(單選框).setIcon(android.R.drawable.ic_dialog_info).setSingleChoiceItems(new String “男”, “女” , “其他, 0,new DialogInterface.OnClickListener() .).setNegativeButton(取消, null).create().show();多選對話框String items = new String Java W
21、eb, Android應用開大發(fā),分布式數(shù)據(jù)庫,測試基礎 ;boolean defaultChoices = false , true ,false ,true;AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle(多選列表項對話框).setIcon(R.drawable.tools).setMultiChoiceItems(items, defaultChoices, new OnMultiChoiceClickListener() .);builder.setPositiveButton(確定, new D
22、ialogInterface.OnClickListener() .);builder.setNegativeButton(取消, null);builder.create().show();列表對話框new AlertDialog.Builder(BasicDialog.this).setTitle(列表對話框).setItems(R.array.city_array, new DialogInterface.OnClickListener() ).create().show();自定義視圖對話框1.自定義布局文件login.xml2. 獲取布局實例xxxLayout3. 設置setView
23、(xxxLayout)思考:怎樣獲取并顯示對話框中的內容?拖動條對話框View view = getLayoutInflater().inflate(R.layout.seek_dialog, null);final SeekBar sbar = (SeekBar) view.findViewById(R.id.seekBar1);AlertDialog.Builder seekbuilder = new AlertDialog.Builder(BasicDialog.this) seekbuilder.setTitle(拖動對話框);seekbuilder.setView(view);see
24、kbuilder.create();seekbuilder.show();進度條對話框v ProgressDialogv 將進度條簡單包裹起來,可以設置進度條的各種式樣v 啟動線程,模擬耗時任務的進行,下載完成后,自動消失進度條對話框 /this表示該對話框是針對當前Activity的 ProgressDialog progressDialog = new ProgressDialog(DialogActivity.this); /設置最大值為100 progressDialog.setMax(100); / 設置可以被取消 progressDialog.setCancelable(true)
25、; /設置進度條風格STYLE_HORIZONTAL progressDialog.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle(“文件下載中); progressDialog.setMessage(“文件已下載); progressDialog.show();日期/時間選擇對話框Calendar c = Calendar.getInstance();DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePicke
26、rDialog.OnDateSetListener() public void onDateSet(DatePicker dp, int year, int month, int dayOfMonth)., c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH);dateDialog.setIcon(android.R.drawable.ic_lock_idle_alarm);dateDialog.setTitle(選擇日期)dateDialog.show();日期/時間選擇對話框TimePickerD
27、ialog tpDialog = new TimePickerDialog(BasicDialog.this, listener2,calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);tpDialog.setIcon(R.drawable.ic_launcher);tpDialog.setMessage(請設置時間);tpDialog.show();自定義對話框v 繼承Dialog類v 實現(xiàn)構造方法和onCreate在styles.xml中自定義style自定義布局v 事件監(jiān)聽View.OnClick
28、Listenerv 傳值自定義并實現(xiàn)接口(傳出)類成員變量(傳入)對話框public class MyDialog extends AlertDialogprotected MyDialog(Context context)protected void onCreate()final MyDialog userDialog = new MyDialog(BasicDialog.this);userDialog.setIcon(R.drawable.ic_launcher);userDialog.setTitle(自定義對話框);userDialog.show();/通過MyDialog對象找到
29、相關控件Button btn_ok = (Button) userDialog.findViewById(R.id.btn_ok_dialog);對話框總結v AlertDialog 普通提示對話框 setMessage 單選對話框 setSingleChoiceItems 多選對話框 setMultiChoiceItems 自定義View對話框 setViewv 自定義Dialog類 布局 dialog.xml 式樣 styles.xml 繼承Dialog,構造方法、onCreate 值的傳入和傳出適度掌握適度掌握 v進度條對話框 ProgessDialogv 拖動條對話框 SeekBarD
30、ialogv 日期選擇對話框 DatePickerDialogv 時間選擇對話框 TimePickerDialog練習常用對話框的使用Lecture 4菜單詳解菜單詳解內容提要選項菜單上下文菜單下拉菜單PopupMenu菜單Menuv OptionsMenu(選項菜單),默認看不到,當用戶點擊”Menu”鍵時,系統(tǒng)才顯示應用關聯(lián)的菜單。 SubMenu 子菜單v ContextMenu(上下文菜單),當用戶一直按住某一個組件時,該組件關聯(lián)的上下文菜單就顯示出來。v PopupMenu(彈出式菜單),它會在指定組件上彈出PopupMenu,可以增加多個菜單項,并可以為菜單項增加子菜單。選項菜單與
31、子菜單選項菜單與子菜單v Menu菜單接口,SubMenu子菜單,MenuItem菜單項v add()方法用于添加菜單項;v addSubMenu()用于添加子菜單。v 添加菜單或子菜單的步驟如下: 1、重寫Activity的onCreateOptionsMenu(Menu menu)方法,在該方法里面調用Menu對象的方法來添加菜單項或子菜單。 2、如果希望應用程序能響應菜單項的單擊事件,重寫Activity的onOptionsItemSelected(MenuItem mi)方法。選項菜單與子菜單選項菜單與子菜單v 超過6個MenuItem時,第6個顯示為more,之后的以子菜單式樣顯示,
32、不再顯示圖標v 通過addSubMenu()用于添加子菜單v Menu可以包含多個SubMenu,SubMenu可以包含多個MenuItemv SubMenu不能包含SubMenu,即子菜單不能嵌套v 子菜單可以添加菜單頭標題、圖標,但菜單項不能顯示圖標v 動態(tài)改變選項菜單的內容,需重寫onPrepareOptionsMenu(Menu)上下文菜單上下文菜單v 類似于普通桌面程序的右鍵菜單v 點擊界面元素超過2s后自動出現(xiàn)的菜單v 可以被注冊到任何View對象中(基本控件、布局文件、ListView的某一項等)v 開發(fā)上下文菜單步驟:v 1、重寫Activity的onCreateContext
33、Menu()方法;v 2、調用Activity的registerForContextMenu(View view)方法為View組件組成上下文菜單。v 3、重寫onContextItemSelected(MenuItem m)方法為菜單項提供響應。上下文菜單上下文菜單ContextMenuv 沒有快捷鍵,不能顯示菜單項圖標v 每個Activity有且只有一個Options Menu,它為整個Activity服務。v 上下文菜單的擁有者是Activity中的View,顯示地通過registerForContextMenu(View view)來為View指定是否擁有上下文菜單,多個View都可擁
34、有ContextMenuv onCreateOptionsMenu只在用戶第一次按“Menu”鍵時被調用,而onCreateContextMenu會在用戶每一次長按View時被調用v 視圖元素需要向上下文菜單傳遞一些信息,比如該View對應DB記錄的ID等,需要使用ContextMenuInfo,并重寫getContextMenuInfo()方法使用XML文件定義菜單v 在res/menu目錄下創(chuàng)建xxx.xml菜單布局文件v 定義菜單資源后,重寫onCreateOptionsMenu()、onCreateContextMenu()方法v 在其中調用MenuInflater對象inflate方
35、法裝載指定資源的對應菜單xxx.xmlv 好處: 簡化Java代碼,降低耦合 為每個菜單項、菜單組分配ID,可擴展性強使用XML文件定義菜單v 菜單資源文件放置在/res/menu目錄下,根目錄是元素,可不指定任何屬性,可包括如下子元素v :定義菜單項 id、title、icon checkable、checked、visible、enablev :將多個包裝成一個菜單組 checkableBehavior:none(不可選)、all(多選)、single(單選) visible:指定該組是否可見 enable:指定該組是否可用v 元素用于定義一份菜單項,元素又可包含元素,位于元素內部的就代表
36、子菜單。Android4.0中setIcon無效的問題v 原因:菜單的源碼類 MenuBuilder做了改變public class MenuBuilder implements Menu ./mOptionalIconsVisible 為true時,才能顯示圖標private boolean mOptionalIconsVisible = false;. void setOptionalIconsVisible(boolean visible) mOptionalIconsVisible = visible; boolean getOptionalIconsVisible() return
37、mOptionalIconsVisible; .Android4.0中setIcon無效的問題v 解決方法: 反射機制,在代碼運行創(chuàng)建菜單的時候通過反射調用setOptionalIconsVisible方法設置mOptionalIconsVisible為true,然后在給菜單添加Icon即可生效 Class clazz = Class.forName(ernal.view.menu.MenuBuilder); Method m = clazz.getDeclaredMethod(setOptionalIconsVisible, boolean.class); m.
38、setAccessible(true); m.invoke(menu, true); 彈出式菜單PopupMenuv PopupMenu代表彈出菜單,它會在指定組件上彈出PopupMenu。需要在API 11以上的版本中才能使用。v PopupMenu可以增加多個菜單項,并可以為菜單項增加子菜單。v 創(chuàng)建PopupMenu步驟 1、調用new PopupMenu(Context context,View anchor)創(chuàng)建下拉菜單,anchor代表要激發(fā)該彈出菜單的組件。 2、調用MenuInflater的inflate()方法將菜單資源填充到PopupMenu中。 3、調用PopupMenu
39、的show()方法顯示彈出式菜單v 注意:PopupMenu的事件監(jiān)聽OnMenuItemClickListener彈出式菜單PopupMenuv 將Chapter03UI中的OptionsMenu提取到xml文件中,并實現(xiàn)相同效果 一般菜單項Item 菜單組group 子菜單v 注意:menu.xml與代碼的配合使用ActionBar實現(xiàn)的菜單網頁資料:Android動作欄ActionBar全解析Android3.0以后菜單的主要實風格ActionBar的用法v 創(chuàng)建Menu.xml,主要設置showAsAction屬性(always:一直顯示;ifRoom:有空間就顯示;never:顯示在
40、overFlow中)v 在onCreateOptionsMenu中解析菜單OverFlow的使用v 設置android:showAsAction為neverv 始終顯示OverFlow溢出菜單 如果該機器擁有實體的menu鍵,則不在右側顯示溢出菜單,而改為按menu來生成 通過探測實體menu鍵的存在與否,來設置OverFlow一直顯示 參考SplitActionBarActivity中的forceShowOverflowMenu方法,并在onCreate中進行調用Up Navigation返回上一頁v 1、在Manifest里面添加上級Activityv 2、在onCreate方法中添加導航
41、設置 setHomeButtonEnabled:決定左上角的圖標是否可以點擊 setDisplayHomeAsUpEnabled:給左上角圖標的左邊加上一個返回的圖標v 3、在onOptionsItemSelected中對android.R.id.home進行監(jiān)聽ActionBar的主題風格v 在AndroidManifest.xml里面的activity標簽里面添加android:theme=android:style/Theme.Holo。v 常用主題: Theme.Holo Theme.Holo.Light Theme.Holo.Light.DarkActionBarv 自定義主題 th
42、eme.xml styles.xml練習菜單的用法Lecture 5導航導航內容提要TabHost導航的兩種實現(xiàn)方式ActionBar+FragmentViewPager+Fragment實現(xiàn)滑動標簽Tab導航TabHost導航的兩種實現(xiàn)方式v 方式一:繼承TabActivity 過程簡單,但是導航欄樣式簡單,無法自定義v 方式二:自定義TabHost 方式較為復雜,但可以自定義導航欄的樣式繼承TabActivity實現(xiàn)導航v 步驟:v 1、創(chuàng)建導航Activity繼承TabActivityv 2、調用getTabHost()得到該Activity的TabHost對象v 3、調用addTab(
43、)加入導航標簽,每調用一次就加入一個導航標簽 可設置文字、圖標、點擊后顯示的布局或Activityv 4、若要監(jiān)聽導航條切換事件,需實現(xiàn)OnTabChangeListener接口,并重寫onTabChanged(String tagString)方法繼承TabActivity實現(xiàn)導航案例:繼承TabActivity,實現(xiàn)不同Tab不同菜單功能詳見:Chapter03UI2/MyTab.java自定義TabHost實現(xiàn)導航v 1、自定義Tabhost布局/Chapter3UI2/res/layout/custom_tab_host.xmlv 2、自定義TabIndicator布局/Chapter
44、3UI2/res/layout/tab_indicator.xmlv 3、創(chuàng)建類TabHostActivity繼承自Activity或ActivityGroupv 4、為Activity設置視圖setContentView(R.layout.custom_tab_host)v 5、通過findViewById實例化TabHost對象th自定義TabHost實現(xiàn)導航v 6、初始化TabHost對象 setup();當繼承自Activity時 setup(LocalActivityManager activityGroup);當繼承自ActivityGroup時v 7、通過th.newTabSpe
45、c()創(chuàng)建導航單,并通過setIndicator、setContent設置指示頭和內容v 8、調用addTab()添加導航單案例:繼承Activity,實現(xiàn)不同Tab加載不同Activity詳見:Chapter03UI2/TabHostActivity.java自定義TabHost布局文件v 1、在XML資源文件中創(chuàng)建TabHost節(jié)點,它的ID可以自行定義v 2、創(chuàng)建TabWidget節(jié)點,用于顯示導航標簽,并設置ID為系統(tǒng)內置的android:id/tabsv 3、創(chuàng)建FrameLayout子節(jié)點,并用于顯示內容,設置其ID為系統(tǒng)內置的android:id/tabcontent 有幾個導航
46、標簽,就要在FrameLayout中定義幾組布局,可以是LinearLayout、RelativeLayout等等 當用來顯示某個Activity時,不必在FrameLayout中再定義布局自定義導航標簽XML文件 tab_indicator.xml普通的布局文件,一般顯示圖片和文字自定義標簽點擊效果 chat_tab_selector.xml常見錯誤v 空指針錯誤 原因:繼承自Activity或ActiivtyGroup,未在addTab之前使用setup初始化TabHost 解決方法:在使用addTab之前,使用setup初始化TabHostv Did you forget to call
47、 public void setup(LocalActivityManager activityGroup)解決方法 原因1:未調用setup初始化 原因2:調用的setup類型與繼承的父類不一致 解決方法:如果后面使用setContent(Intent )設置內容,必須繼承自ActivityGroup,并且使用setup(LocalActivityManager activityGroup)初始化,如果setContent(int viewID)設置內容,則使用setup()初始化ActionBar+Fragment=Tab導航ActionBar+Fragment=Tab導航v tab對應不
48、同的Fragment,點擊不同的Tab就切換到對應的Fragment1. 獲取ActionBar:ActionBar actionBar = getActionBar()2. 設置AcitonBar的操作模式:ActionBar.NAVIGATION_MODE_TABS3. 調用AciontBar的newTab()生成ActionBar.Tab,更多設置setText、setIconActionBar+Fragment=Tab導航1. 實現(xiàn) ActionBar.TabListener接口,重寫一些函數(shù):onTabSelected、onTabReSelected、onTabUnSelected
49、使用FragmentTransaction動態(tài)控制Fragment的呈現(xiàn) replace、commit2. 為每個 ActionBar.Tab 添加ActionBar.TabListener.3. 調用addTab()將生成的Tab加入ActionBar中案例:繼承Activity,不同Tab加載不同的Fragment詳見:Chapter03UI2/ActionBarTab_Activity.javaViewPager+Fragment實現(xiàn)滑動標簽頁ViewPager介紹v ViewPager是android擴展包v4包中的類,這個類可以讓用戶左右切換當前的view。v PagerTabStr
50、ip類繼承PagerTitleStrip類,當作ViewPager的選項卡,但必須作為ViewPager的子標簽v 在Activity里實例化ViewPager組件,并設置它的Adapter 一般重寫PagerAdapter 當與Fragment一起使用時,重寫FragmentPagerAdapterViewPager的基本用法v 借助 android-support-v4.jar 包v 構建Activity的布局文件 basic_layout.xml 使用 標簽添加ViewPager組件 添加子標簽 ,作為選項卡v 創(chuàng)建Activity,實例化ViewPager及PagerTabStripv
51、 構建并為ViewPager添加PagerAdapter適配器,至少實現(xiàn)如下方法 getCount isViewFromObject instantiateItem destroyItemViewPager與Fragment結合v 官方建議將ViewPager與Fragment配合使用,實現(xiàn)不同頁面獨立布局及響應v 適配器采用FragmentPagerAdapter,至少實現(xiàn)下列方法 getCount getItemv 準備的數(shù)據(jù) 頁面布局 fragment_viewpager_layout.xml 獨立的Fragment類 ButtonFragment.java TestFragment.j
52、ava重寫FragmentPagerAdapterv 重寫FragmentPagerAdapter至少覆蓋以下方法v getCount()public int getCount() return list.size();v getItem()public Fragment getItem(int arg0) return list.get(arg0);課外拓展v ActionBar和Fragment結合ViewPager實現(xiàn)TabActivityv http:/ http:/ http:/ http:/ Android開發(fā)技巧開發(fā)技巧實現(xiàn)底部圖標文字的導航欄(已更實現(xiàn)底部圖標文字的導航欄(已更
53、新)新) 練習導航欄的用法Lecture 6AdapterAdapter及及AdapterAdapter控件控件內容提要ArrayAdapterSimpleAdapterSimpleCursorAdapterBaseAdapter及自定義AdapterAdapter控件Adapter適配器v Adapter對象在Adapter控件和數(shù)據(jù)源之間扮演橋梁的角色。提供訪問數(shù)據(jù)源的入口,把從數(shù)據(jù)源拿到的數(shù)據(jù)項逐項加載到Adapter控件中。v 四種Adapter適配器 ArrayAdapter SimpleAdapter SimpleCursorAdapter 自定義的Adapter(繼承自BaseA
54、dapter)AutoCompleteTextView控件AutoCompleteTextView類繼承自EditText類與EditText控件是一樣的當用戶輸入了與事先為該控件定義的一組字符串集中相關的信息時,才會出現(xiàn)下拉選項,供用戶選擇示例講解ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, CONTENT);autoTextView.setAdapter(adapter);/輸入一個字母就開始自動提示autoTextView.setThreshold(1)
55、;String CONTENT = new StringChina,China1,china2,USA,USA1,USA2,唱歌,china,cd,ch,chi,chin;Spinner控件Spinner下拉列表,外觀是一個一行的列表框,用戶單擊控件,下拉出選項列表供用戶選擇Spinner每次只顯示用戶選中的元素Spinner控件v 為Spinner加載數(shù)據(jù)的兩種方式 方式1:在XML文件中先定義好要加載的數(shù)據(jù)資源,然后使用ArrayAdapter.createFromResource()把資源加載進來 方式2:直接在Java代碼中使用ArrayAdapter對象,把List中的數(shù)據(jù)資源加載到
56、Spinner中v 事件監(jiān)聽onItemSelectedListener 使用setOnItemSelectedListener()方法設置監(jiān)聽,傳入一個實現(xiàn)了Spinner.onItemSelectedListener接口的匿名內部類對象,同時實現(xiàn)接口的onItemSelected方法,通過傳入的position參數(shù)完成匹配示例講解private Spinner spinner;spinner = (Spinner) findViewById(R.id.spinner1);ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
57、 R.array.courses, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);spinner.setPrompt(請選擇課程);spinner.setSelection(0, true);spinner.setOnItemSelectedListener()ListView控件v 以列表形式展示內容,并根據(jù)數(shù)據(jù)的長度自適應顯示v 繼承ListActi
58、vity或在Activity布局中加入ListView控件v 采用MVC模式將前端顯示與后端數(shù)據(jù)分離 提供數(shù)據(jù)的List或數(shù)組相當于Model ListView相當于視圖View Adapter對象相當于Controlv 指定Adapter對象,通過Adapter獲取要顯示的數(shù)據(jù)為ListView填充數(shù)據(jù)v 使用Adapter對象給ListView填充數(shù)據(jù)v ArrayAdapter:適用于列表項只含有文本信息的情況v SimpleAdapter:適用于每一個列表項中含有不同的子控件,比如圖片+文本+按鈕的v SimpleCursorAdapter:專門用來把一個Cursor中的數(shù)據(jù)映射到列表中,Cursor中的每一條數(shù)據(jù)映射為列表中的一項v 自定義Adapter:繼承BaseAdapter,完全自定義數(shù)據(jù)適配方式,靈活性最強響應用戶單擊事件v setOnItemClickListener()綁定AdapterV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編初中歷史八下第1課中華人民共和國成立教案
- 2025年全球及中國大型不銹鋼鑄件行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球化妝品級枯草菌脂肽鈉行業(yè)調研及趨勢分析報告
- 2025-2030全球光纖導管靜脈激光治療行業(yè)調研及趨勢分析報告
- 2025年全球及中國銅纜高速連接器行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025國際(非獨占)商標使用許可合同
- 2025農業(yè)種植生產產銷合同書
- 餐飲業(yè)合同年
- 2025室內裝修設計合同范本
- 房屋租賃續(xù)簽合同模板
- 2025年湖南高速鐵路職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 醫(yī)保政策與健康管理培訓計劃
- 策略與博弈杜塔中文版
- 無人化農場項目可行性研究報告
- 2024屆上海市金山區(qū)高三下學期二模英語試題(原卷版)
- 學生春節(jié)安全教育
- 2024-2025年校長在教研組長和備課組長會議上講話
- 2025屆江蘇省常州市高級中學高三第二次模擬考試語文試卷含解析
- 高三日語一輪復習助詞「で」的用法課件
- 2024-2030年中國銣銫及其化合物行業(yè)深度調研及投資戰(zhàn)略分析報告
- 散貨物流行業(yè)市場調研分析報告
評論
0/150
提交評論