欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 獲得View寬高的幾種方式總結(jié)

 更新時間:2017年06月26日 10:19:16   作者:_小馬快跑_  
這篇文章主要介紹了Android 獲得View寬高的幾種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下

《Android開發(fā)藝術(shù)探索》筆記:

在Activity的onCreate()或者onResume()中去獲得View的高度的時候不能正確獲得寬度和高度信息,這是因為 View的measure過程和Activity的生命周期不是同步執(zhí)行的,因此無法保證Activity執(zhí)行了onCreate onStart onResume時,某個View已經(jīng)測量完畢了,如果還沒有測量完,那么獲得的寬高就是0。可以通過下面幾種方式來獲得:

1、onWindowFocusChanged

onWindowFocusChanged:View已經(jīng)初始化完畢,寬高已經(jīng)有了,需要注意onWindowFocusChanged會被調(diào)用多次,Activity得到焦點和失去焦點都會執(zhí)行這個回調(diào),見下圖:


1、Activity首次進(jìn)入的時候執(zhí)行的方法

2、跳轉(zhuǎn)到另一個Activity時

3、返回到當(dāng)前Activity時
可見當(dāng)執(zhí)行onResume和onPause時,onWindowFocusChanged都會被調(diào)用。

 @Override
 public void onWindowFocusChanged(boolean hasFocus) {
   super.onWindowFocusChanged(hasFocus);
   if (hasFocus) {
     //獲得寬度
     int width = view.getMeasuredWidth();
     //獲得高度
     int height = view.getMeasuredHeight();
   }
 }

2、view.post(runnable)

通過post可以將一個runnable投遞到消息隊列的尾部,等待Looper調(diào)用此runnable的時候,View也已經(jīng)初始化好了,示例:

 @Override
 protected void onStart() {
   super.onStart();
   view.post(new Runnable() {
     @Override
     public void run() {
       int width=view.getMeasuredWidth();
       int height=view.getMeasuredHeight();
     }
   })
 }

3、ViewTreeObserver

使用ViewTreeObserver的眾多回調(diào)可以完成這個功能,比如使用OnGlobalLayoutListener這個接口,當(dāng)View樹的狀態(tài)發(fā)生改變或者View樹內(nèi)部的View的可見性發(fā)生改變時,OnGlobalLayout方法將會被回調(diào),這是獲取View寬高很好的一個時機,需要注意的是,伴隨著View樹的狀態(tài)改變,OnGlobalLayout會被調(diào)用多次,示例:

@Override
protected void onStart() {
  super.onStart();
  ViewTreeObserver observer=view.getViewTreeObserver();
  observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      int width=view.getMeasuredWidth();
      int height=view.getMeasuredHeight();
    }
  });
}

4、view.measure(int widthMeasureSpec, int heightMeasureSpec)

通過手動對View進(jìn)行measure來得到View的寬高,這里要分情況處理,根據(jù)View的LayoutParams來分:

match-parent

無法測出具體的寬高,因為根據(jù)View的measure過程,構(gòu)造此種MeasureSpec需要知道parentSize,即父容器的剩余空間,而這個值我們是不知道的,所以不能測出View的大小。

具體的數(shù)值(dp/px)

比如寬高都是100px,如下measure:

 int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
 int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
 view.measure(widthMeasureSpec, heightMeasureSpec);

wrap_content

如下measure:

 int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST);
 int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST);
 view.measure(widthMeasureSpec, heightMeasureSpec);

View的specSize使用30位二進(jìn)制表示,也就是說最大是30個1,也就是(1 << 30) - 1,在最大化模式下,我們用View理論上能支持的最大值去構(gòu)造MeasureSpec是合理的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android三級緩存原理講解

    Android三級緩存原理講解

    今天小編就為大家分享一篇關(guān)于Android三級緩存原理講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Flutter使用AnimatedSwitcher實現(xiàn)場景切換動畫

    Flutter使用AnimatedSwitcher實現(xiàn)場景切換動畫

    在應(yīng)用中,我們經(jīng)常會遇到切換組件的場景。本文將利用Flutter中提供的AnimatedSwitcher這一動畫組件來實現(xiàn)頁面內(nèi)的場景切換,需要的可參考一下
    2022-03-03
  • Android帶刷新時間顯示的PullToRefresh上下拉刷新

    Android帶刷新時間顯示的PullToRefresh上下拉刷新

    這篇文章主要為大家詳細(xì)介紹了Android帶刷新時間顯示的PullToRefresh上下拉刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android開發(fā)之判斷有無虛擬按鍵(導(dǎo)航欄)的實例

    Android開發(fā)之判斷有無虛擬按鍵(導(dǎo)航欄)的實例

    下面小編就為大家分享一篇Android開發(fā)之判斷有無虛擬按鍵(導(dǎo)航欄)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Android 通過Base64上傳圖片到服務(wù)器實現(xiàn)實例

    Android 通過Base64上傳圖片到服務(wù)器實現(xiàn)實例

    這篇文章主要介紹了Android 通過Base64上傳圖片到服務(wù)器實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android自定義dialog 自下往上彈出的實例代碼

    Android自定義dialog 自下往上彈出的實例代碼

    本文通過實例代碼給大家介紹了Android自定義dialog 自下往上彈出效果,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-08-08
  • OkHttp原理分析小結(jié)

    OkHttp原理分析小結(jié)

    OkHttp 是 Square 公司開源的一款網(wǎng)絡(luò)框架,封裝了一個高性能的 http 請求庫,本文對OkHttp原理給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Android布局之LinearLayout自定義高亮背景的方法

    Android布局之LinearLayout自定義高亮背景的方法

    這篇文章主要介紹了Android布局之LinearLayout自定義高亮背景的方法,實例分析了Android中LinearLayout布局參數(shù)設(shè)置技巧,需要的朋友可以參考下
    2016-01-01
  • 基于Android實現(xiàn)一個常用的布局吸頂效果

    基于Android實現(xiàn)一個常用的布局吸頂效果

    這篇文章給大家介紹一個布局吸頂效果,一般出現(xiàn)在內(nèi)容較長頁面還嵌套著分類頁面的情況,比如電商的詳情頁嵌套分類,在頁面滑動到tab的時候我們希望tab還能保留在頁面頂部而不被頂上去,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-09-09
  • Android控件BottomSheet實現(xiàn)底邊彈出選擇列表

    Android控件BottomSheet實現(xiàn)底邊彈出選擇列表

    這篇文章主要介紹了Android控件BottomSheet實現(xiàn)底邊彈出選擇列表,比較常用的選擇條件或跳轉(zhuǎn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論