首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 14979|回復(fù): 0
上一主題 下一主題
[教程]

《Android Dev Guide》系列教程8:用戶界面

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
>
在一個(gè)Android應(yīng)用程序里,用戶接口是一系列的View和ViewGroup對象組合而成。Android有很多種View和ViewGroup對象,他們都繼承自View基類。   
View對象是Android平臺用戶接口的基本對象。這些view類作為與用戶交互的widgets小部件的父類,像文本框和按鈕。ViewGroup作為提供各種布局結(jié)構(gòu)的layouts的父類,例如linear線性布局,表格布局和絕對布局。   
一個(gè)view對象是一個(gè)數(shù)據(jù)結(jié)構(gòu),他存儲布局參數(shù)和屏幕特定區(qū)矩形區(qū)域的內(nèi)容。一個(gè)view會處理自己所在屏幕區(qū)域的測量、布局、繪制、焦點(diǎn)改變、滾動、和按鍵手勢交互。作為用戶交互對象,一個(gè)view可以作為用戶與系統(tǒng)的交互工具,接收事件。   
   
在Android平臺,你要用到View或ViewGroup的層、節(jié)點(diǎn)的方式來定義一個(gè)Android用戶界面,就像下面的圖表,這個(gè)層次結(jié)構(gòu)樹可以按你的需求變得簡單或者復(fù)雜。你可以用Android系統(tǒng)已經(jīng)定義好的小控件或者布局,或者自定義一些。   
  為了能讓你的view層次結(jié)構(gòu)在屏幕上渲染,你的activity需要調(diào)用setContentView()方法并且傳遞一個(gè)根節(jié)點(diǎn)對象的引用。Android系統(tǒng)接收這些配置,并使用他們來進(jìn)行測量繪制這個(gè)樹形的視圖結(jié)構(gòu)。這個(gè)視圖結(jié)構(gòu)的根節(jié)點(diǎn)要求他的孩子節(jié)點(diǎn)自我繪制,反過來說,每個(gè)viewGroup節(jié)點(diǎn)負(fù)責(zé)讓他們的子節(jié)點(diǎn)自我繪制。子節(jié)點(diǎn)會在父節(jié)點(diǎn)哪里請求到尺寸和位置,但父對象會最終決定他們孩子有多大。Android按順序解析你的布局上的所有元素,從頂端開始,實(shí)例化view并且把他們添加到父對象。因?yàn)樗麄兌际前错樞虮焕L制的,如果某些view超出的顯示范圍,那么后來繪制的將會覆蓋原來的。   
關(guān)于view結(jié)構(gòu)體系怎樣繪制,在后面會有詳細(xì)的討論。   
   
通常最多的布局是通過xml來定義。xml提供一個(gè)容易閱讀的結(jié)構(gòu),很像html。xml中每個(gè)元素都是一個(gè)view或者viewGroup對象(或他們的子類)。view在樹結(jié)構(gòu)中是葉子節(jié)點(diǎn),ViewGroup對象在非葉子節(jié)點(diǎn)(樹枝節(jié)點(diǎn),參考上圖)。   
xml元素名代表著各個(gè)類。比如<TextView>元素會創(chuàng)建一個(gè)TextView控件,一個(gè)<LinearLayout>會創(chuàng)建一個(gè)LinearLayout的viewGroup,當(dāng)你加載一個(gè)布局資源,Android系統(tǒng)會初始化運(yùn)行時(shí)對象,即對應(yīng)的布局元素。   
例如,一個(gè)簡單的垂直布局,里面包含一個(gè)textView和一個(gè)Button。   
   
  1. <?xml version="1.0" encoding="utf-8"?>     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
                  android:layout_width="fill_parent"      
                  android:layout_height="fill_parent"     
                  android:orientation="vertical" >     
        <TextView android:id="@+id/text"     
                  android:layout_width="wrap_content"     
                  android:layout_height="wrap_content"     
                  android:text="Hello, I am a TextView" />     
        <Button android:id="@+id/button"     
                android:layout_width="wrap_content"     
                android:layout_height="wrap_content"     
                android:text="Hello, I am a Button" />     
    </LinearLayout>  
復(fù)制代碼
注意,linearLayout元素包含著TextView和Button。你可以嵌套另外的LinearLayout,來增加view的長度,或者增加一個(gè)更復(fù)雜的布局。
更多關(guān)于UI布局的信息,請參考 Declaring Layout章節(jié)。
你可以在你的布局里用很多種布局方式,使用很多不同類型的viewGroup,你可以定義無限多的子view或者子viewGroup。android提供一些預(yù)先定義好的布局,包括:LinearLayout-線性布局, RelativeLayout-關(guān)系布局, TableLayout-表格布局, GridLayout 網(wǎng)格布局等。他們提供一些獨(dú)特的參數(shù)用來定義view的位置和布局結(jié)構(gòu)。
widget是一個(gè)服務(wù)于用戶與界面交互的view對象。Android提供很多視圖小部件,如按鈕、尋則狂、文本輸入框、到呢個(gè),你可以很快的構(gòu)建自己的布局。一些小部件很復(fù)雜,像日期選擇器,一個(gè)時(shí)鐘,縮放控制。但你不會被Android平臺所提供的UI部件所限制,你可以自定義UI部件,可以繼承或者結(jié)合已經(jīng)存在的UI部件。
一旦你向界面添加了view或者widget,你可能會想他們怎樣與用戶進(jìn)行交互的,這樣你就可以執(zhí)行一些操作。添加UI事件,你需要做兩件事情:
多半情況下,這就是你怎樣監(jiān)聽事件:view 類包含了一些名如OnXXXListener的監(jiān)聽器,他們都有名為OnXXX()的回調(diào)方法。例如:View.onClickListener(這是處理點(diǎn)擊事件的),View.onTouchListener(處理觸摸事件),View
.onKeyListener(處理按鍵事件),所以如果你想讓view響應(yīng)點(diǎn)擊事件,比如按鈕被選中,你需要實(shí)現(xiàn)OnClickListener接口并且定義回調(diào)方法,并且用setOnClickListener()方法來注冊View。
如果你失信了自己的View類并且想要監(jiān)聽一些特殊的事件,那你應(yīng)該用這種方法。例如,你可以處理屏幕觸摸事件,處理滾動球事件,按鍵等事件。它允許你定義默認(rèn)的事件,即自定義的view的每個(gè)事件,確定這個(gè)時(shí)間是否會傳遞到一些字view。然后,他們調(diào)用view類的回調(diào)函數(shù),所以當(dāng)你自定義一個(gè)組件時(shí)才有機(jī)會用到這種方法。
應(yīng)用程序菜單是UI的另一個(gè)很重要的部分。Menu提供一些可靠的借口來展示程序的功能和一些設(shè)置。通常menu是通過按menu鍵才顯示的。然而,你可以讓用戶按下或者按住某一項(xiàng)時(shí)顯示menu菜單。
menu菜單也遵循view的層次結(jié)構(gòu),但不要自己定義。取而代之的是,你只需為你的activity定義onCreateOptionsMenu()和onCreateContextMenu()兩個(gè)回調(diào)方法即可,在適當(dāng)?shù)臅r(shí)間,Android會自動的繪制必要的視圖結(jié)構(gòu)并且menu的所包含的子項(xiàng)的。
Menu會處理他自己的時(shí)間。所以不需要注冊事件監(jiān)聽器,當(dāng)menu中的某一項(xiàng)被選中,系統(tǒng)會調(diào)用onOptionsItemSelected()方法或者onContextItemSelected()方法。
和應(yīng)用程序的布局很像,你可以用xml來配置你的menu項(xiàng)。
一旦你了解了創(chuàng)建用戶界面的基本原則。你可以瀏覽一些高級特征來創(chuàng)建更復(fù)雜的應(yīng)用程序接口。
一些時(shí)候,你不想用“硬代碼”來填充一些view的數(shù)據(jù),相反,你想讓view綁定額外的數(shù)據(jù)集。要這樣的話,你要定義一個(gè)AdapterView,每個(gè)子View里的數(shù)據(jù)都會被適配器填充。
適配器視圖對象 AdapterView是實(shí)現(xiàn)的ViewGroup接口,子類是由被給出的適配器對象決定的。適配器就像你的adapter視圖和數(shù)據(jù)源之間的適配器。這里有幾種適配器類的實(shí)現(xiàn)方式,對于特殊的任務(wù),例如自定義的適配器從一個(gè)Cursor來讀取數(shù)據(jù)庫的數(shù)據(jù),或者一耳光數(shù)組適配器從任意一個(gè)數(shù)組讀取數(shù)據(jù)。
你或許不滿意標(biāo)準(zhǔn)控件的外觀,你可以定制他們的風(fēng)格和主題來改變他們。
@ 一個(gè)style是一個(gè)格式化的屬性集,你作為布局的其中一個(gè)單元來使用他們。例如,你可以定義某些文本的文字大小和顏色作為特殊的view元素。
@ 一個(gè)theme主題是應(yīng)用程序中整個(gè)activity的個(gè)格式化的屬性集。例如,你可以定義窗體的邊框和面板的背景,并且設(shè)置menu的字體大小和顏色。它可以應(yīng)用在整個(gè)程序里。
風(fēng)格和主題屬于資源。Android提供一些默認(rèn)的風(fēng)格和主題資源來讓你使用?;蛘吣阋部梢宰约憾ㄖ扑麄儭?/div></font

上一篇:《Android Dev Guide》系列教程9:用戶界面之聲明布局
下一篇:《Android Dev Guide》系列教程7:Android生命周期之serviceBroadcast
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-12-22 23:23 , Processed in 0.067097 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表