Android初學習 - 擷取控制項尺寸的方法__Android

來源:互聯網
上載者:User

        如何擷取一個控制項的長和高,相信很多朋友第一眼看見這個問題都會覺得很簡單,直接在onCreate裡面調用getWidth、getMeasuredWidth不就可以獲得了嗎,但是,事實上是並沒有簡單的,不信的話,你可以去試一下,在onCreate裡面,你是無法獲得長寬值的,始終為0。

        熟悉view繪製流程的朋友應該一眼就看出來了,在onCreate中,我們的控制項其實還並沒有畫好,換句話說,等onCreate方法執行完了,我們定義的控制項才會被度量(measure),所以我們在onCreate方法裡面通過view.getHeight()擷取控制項的高度或者寬度肯定是0。

        下面有三種方法可以在onCreate()中擷取控制項的尺寸:

1. 這種方法很簡單,就是我們自己來測量

int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);    int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);    imageView.measure(w, h);    int height = imageView.getMeasuredHeight();    int width = imageView.getMeasuredWidth();

2. 這個方法,我們需要註冊一個ViewTreeObserver的監聽回調,這個監聽回調,就是專門監聽繪圖的,既然是監聽繪圖,那麼我們自然可以擷取測量值了,同時,我們在每次監聽前remove前一次的監聽,避免重複監聽。

    ViewTreeObserver vto = imageView.getViewTreeObserver();         vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {             public boolean onPreDraw() {                 vto.removeOnPreDrawListener(this);                int height = imageView.getMeasuredHeight();                 int width = imageView.getMeasuredWidth();                 return true;             }         });

3.  這個方法於第2個方法基本相同,但他是全域的布局改變監聽器,所以是最推薦使用的。

     ViewTreeObserver vto = imageView.getViewTreeObserver();           vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {             @Override              public void onGlobalLayout() {                 imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);                 imageView.getHeight();                imageView.getWidth();            }           });


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.