<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Android屏幕元素層次結(jié)構(gòu)

    Posted on 2009-11-04 15:57 瘋狂 閱讀(907) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): android
    對(duì)于一個(gè)Android手機(jī)應(yīng)用來(lái)說(shuō),一個(gè)好看而又簡(jiǎn)潔的界面,是相當(dāng)重要的,既能提高使用者的體驗(yàn),又保證應(yīng)用的高效執(zhí)行。而Android SDK已經(jīng)為我們提供了一套完善的界面設(shè)計(jì)功能,有豐富的組件供我們使用,如果還不能滿(mǎn)足我們的界面需求,我們還可以對(duì)它們進(jìn)行擴(kuò)展。為了達(dá)到這樣的目標(biāo),我們就要對(duì)Android SDK中提供的界面生成技術(shù)進(jìn)行全面深入的學(xué)習(xí),做到應(yīng)用自如。
    本文參考Android提供的相關(guān)文檔,只對(duì)Android的屏幕元素的層次結(jié)構(gòu)做一個(gè)小結(jié),從總體上對(duì)Android的界面設(shè)計(jì)有一個(gè)把握,我想這是很有必要的。

    android.app.Activity
            對(duì)于一個(gè)Android應(yīng)用來(lái)說(shuō),android.app.Activity類(lèi)實(shí)例是一個(gè)最基本的功能單元。一個(gè)Activity實(shí)例可以做很多的事情,但是它本身無(wú)法顯示在屏幕上,而是借助于Viewgroup和View,這兩個(gè)才是Android平臺(tái)上最基本的兩個(gè)用戶(hù)界面表達(dá)單元。

    android.view.ViewGroup
            ViewGroup是一個(gè)特殊的View類(lèi),它繼承于android.view.View。它的功能就是裝載和管理下一層的View對(duì)象和ViewGroup對(duì)象。ViewGroup是布局管理器(layout)及view容器的基類(lèi)。
            ViewGroup中,還定義了一個(gè)嵌套類(lèi)ViewGroup.LayoutParams。這個(gè)類(lèi)定義了一個(gè)顯示對(duì)象的位置、大小等屬性,view通過(guò)LayoutParams中的這些屬性值來(lái)告訴父級(jí),它們將如何放置。
            在這里,繼承于ViewGroup的一些主要的布局類(lèi)如下:
            1、FrameLayout:最簡(jiǎn)單的一個(gè)布局對(duì)象。它里面只顯示一個(gè)顯示對(duì)象。所有的顯示對(duì)象都將會(huì)固定在屏幕的左上角,不能指定位置。但允許有多個(gè)顯示對(duì)象,但后一個(gè)將會(huì)直接在前 一個(gè)之上進(jìn)行覆蓋顯示,把前一個(gè)部份或全部擋?。ǔ呛笠粋€(gè)是透明的)。
            2、LinearLayout:以單一方向?qū)ζ渲械娘@示對(duì)象進(jìn)行排列顯示,如以垂直排列顯示,則布局管理器中將只有一列;如以水平排列顯示,則布局管理器中將只有一行。同時(shí),它還可以對(duì)個(gè)別的顯示對(duì)象設(shè)置顯示比例。
            3、TableLayout:以擁有任意行列的表格對(duì)顯示對(duì)象進(jìn)行布局,每個(gè)顯示對(duì)象被分配到各自的單元格之中,但單元格的邊框線(xiàn)不可見(jiàn)。
            4、AbsoluteLayout:允許以坐標(biāo)的方式,指定顯示對(duì)象的具體位置,左上角的坐標(biāo)為(0, 0),向下及向右,坐標(biāo)值變大。這種布局管理器由于顯示對(duì)象的位置定死了,所以在不同的設(shè)備上,有可能會(huì)出現(xiàn)最終的顯示效果不一致。
            5、RelativeLayout:允許通過(guò)指定顯示對(duì)象相對(duì)于其它顯示對(duì)象或父級(jí)對(duì)象的相對(duì)位置來(lái)布局。如一個(gè)按鈕可以放于另一個(gè)按鈕的右邊,或者可以放在布局管理器的中央。
            在Android中,提供了很多的布局管理器,這里也不一一列舉,開(kāi)發(fā)者可以根據(jù)實(shí)際需要,選擇合適的布局管理器。

    android.view.View

            View是所有view類(lèi)的基類(lèi),一個(gè)view通常占用屏幕上的一個(gè)矩形區(qū)域,并負(fù)責(zé)繪圖及事件處理。View是所有窗體部件的基類(lèi),是為窗體部件服務(wù)的,這里的窗體部件即UI控件,如一個(gè)按鈕或文本框。Android已經(jīng)為我們提供了一系列的標(biāo)準(zhǔn)UI控件供我們直接使用,同時(shí),我們也可以通過(guò)繼承于View類(lèi)或View的子類(lèi),來(lái)實(shí)現(xiàn)我們自定義的UI控件。
            要定制我們自己的UI控件,需要重載View類(lèi)中的一些方法,以下表格列出View提供出來(lái)的,供重載的方法,這些方法不必都要重載,但至少要實(shí)現(xiàn)onDraw(android.graphics.Canvas)方法。
    類(lèi)別 方法 描述
    Creation Constructors
    onFinishInflate() 當(dāng)View和它的所有子對(duì)象從XML中導(dǎo)入之后,調(diào)用此方法
    Layout onMeasure(int, int) View會(huì)調(diào)用此方法,來(lái)確認(rèn)自己及所有子對(duì)象的大小
    onLayout(boolean, int, int, int, int, int, int) 當(dāng)View要為所有子對(duì)象分配大小和位置時(shí),調(diào)用此方法
    onSizeChanged(int, int, int, int) 當(dāng)View大小改變時(shí),調(diào)用此方法
    Drawing onDraw(Canvas) 當(dāng)View要繪制它的內(nèi)容時(shí),調(diào)用此方法
    Event processing onKeyDown(int, KeyEvent) 當(dāng)一個(gè)新的按鍵事件發(fā)生時(shí),調(diào)用此方法
    onKeyUp(int, KeyEvent) 當(dāng)一個(gè)按鍵釋放事件發(fā)生時(shí),調(diào)用此方法
    onMotionEvent(MotionEvent) 當(dāng)一個(gè)動(dòng)作事件(如觸摸)發(fā)生時(shí),調(diào)用此方法
    Focus onFocusChanged(boolean, int) 當(dāng)View獲得或失去焦點(diǎn)時(shí),調(diào)用此方法
    Attaching onAttachedToWindow() 當(dāng)View附加到一個(gè)窗體上時(shí),調(diào)用此方法
    onDetachedFromWindow() 當(dāng)View離開(kāi)它的窗體時(shí),調(diào)用此方法
             以上的事件是Android自動(dòng)會(huì)處理的,而對(duì)于其它一些重要的事件,如鼠標(biāo)點(diǎn)擊等,卻必須要我們自己手動(dòng)添加到view中,這點(diǎn)比較郁悶,具體的添加方法如下:
    public class SendResult extends Activity
    {
    protected void onCreate(Bundle savedValues)
    {
    ...

    Button button = (Button)findViewById(R.id.corky);
    button.setOnClickListener(mCorkyListener);
    }

    private OnClickListener mCorkyListener = new OnClickListener()
    {
    public void onClick(View v)
    {
    setResult(RESULT_OK, "Corky!");
    finish();
    }
    };
    屏幕元素層次結(jié)構(gòu)


            對(duì)于Android應(yīng)用中的一個(gè)屏幕,它的屏幕元素是按層次結(jié)構(gòu)來(lái)描述的。要將一個(gè)屏幕元素層次樹(shù)綁定在一個(gè)屏幕上顯示,Activity會(huì)調(diào)用它的setContentView()方法并且傳入這個(gè)層次樹(shù)的根節(jié)點(diǎn)引用。當(dāng)Activity被激活并且獲得焦點(diǎn)時(shí),系統(tǒng)會(huì)通知activity并且 請(qǐng)求根節(jié)點(diǎn)去計(jì)算并繪制樹(shù),根節(jié)點(diǎn)就會(huì)請(qǐng)求它的子節(jié)點(diǎn)去繪制它們自己。
            每個(gè)樹(shù)上的ViewGroup節(jié)點(diǎn)會(huì)負(fù)責(zé)繪制它的子節(jié)點(diǎn)。ViewGroup會(huì)計(jì)算它的有效空間,布局所有的子顯示對(duì)象,并最終調(diào)用所有的子顯示對(duì)象的Draw()方法來(lái)繪制顯示對(duì)象。各個(gè)子顯示對(duì)象可以向父對(duì)象請(qǐng)求它們?cè)诓季种械拇笮『臀恢茫罱K決定各個(gè)子顯示對(duì)象的大小和位置的是父對(duì)象。
    轉(zhuǎn)載地址:http://hi.baidu.com/weiyousheng/blog/item/bed1260964dd27a72fddd456.html

    評(píng)論

    # re: Android屏幕元素層次結(jié)構(gòu)[未登錄](méi)  回復(fù)  更多評(píng)論   

    2011-07-22 10:01 by 黑石
    <p style="color:red">頂一下</p>
    主站蜘蛛池模板: 一级毛片a免费播放王色电影| 中文字幕在线观看亚洲日韩| 最近中文字幕国语免费完整 | 国产99视频精品免费观看7| 国产亚洲真人做受在线观看| 免费无码国产在线观国内自拍中文字幕 | 亚洲美女免费视频| 91亚洲精品麻豆| 一二三四在线观看免费中文在线观看| 日韩成人免费aa在线看| 亚洲五月激情综合图片区| 久久免费动漫品精老司机 | 久久午夜伦鲁片免费无码| 免费又黄又爽的视频| 污污免费在线观看| 亚洲精品国产成人影院| 日韩亚洲产在线观看| 18禁无遮挡无码网站免费| 亚洲第一视频网站| 美女内射毛片在线看免费人动物 | 亚洲AV日韩AV永久无码免下载 | 亚洲妇熟XXXX妇色黄| 黄色一级毛片免费看| 色影音免费色资源| 久久久亚洲精品国产| 24小时日本电影免费看| 亚洲日韩国产AV无码无码精品| 99精品视频免费在线观看| 亚洲国产情侣一区二区三区| 免费观看的毛片手机视频| 一级人做人a爰免费视频| 亚洲精品在线观看视频| 国产麻豆视频免费观看| 国产精品亚洲专区无码WEB| 自拍偷自拍亚洲精品第1页| 在线毛片片免费观看| 亚洲午夜精品一区二区公牛电影院| 成人免费视频试看120秒| 亚洲第一男人天堂| 亚洲国产精品尤物yw在线| 91香蕉国产线观看免费全集 |