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

Android中獲取控件寬高的4種方法集合

 更新時間:2018年02月05日 10:36:27   作者:徐風來  
下面小編就為大家分享一篇Android中獲取控件寬高的4種方法集合,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

借鑒自開發(fā)藝術

1.onWindowFocusChanged

這個方法會被調(diào)用多次,在View初始化完畢后會調(diào)用,當Activity的窗口得到焦點和失去焦點都會被調(diào)用一次(Activity繼續(xù)執(zhí)行和暫停執(zhí)行時)。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
  super.onWindowFocusChanged(hasFocus);
  if (hasFocus) {
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
  }
}

2.view.post

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ViewGroup root = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.activity_main, null, false);
  setContentView(root);
  final View view = root;
  view.post(new Runnable() {
    @Override
    public void run() {
      int width = view.getMeasuredWidth();
      int height = view.getMeasuredHeight();
      Log.i(TAG, width + " " + height);
    }
  });
}

具體原理暫時還不懂,不過應該是view封裝的異步回調(diào)初始化后,view的測繪多半也完成了,這是一個同步的過程。所以才可以接收到消息。

3.ViewTreeObserver

他有許多回調(diào)。比如當View樹的狀態(tài)發(fā)生改變或者View樹內(nèi)部的View可見性發(fā)現(xiàn)改變時,onGlobalLayout方法將被回調(diào)。

final View view = root;
ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    Log.i(TAG, width + " " + height);
  }
});

通過一種增加global listener又移除的方式,獲取觀察而來的消息。

4.view.measure

手動測繪,分3種情況:

一、match_parent

這個情況是獲取不到的。構(gòu)造這種情況的MeasureSpec需要知道父容器的剩余空間。

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

比如寬高都是100px,可以這樣做:

View view = root;
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
view.measure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG, widthMeasureSpec + " " + heightMeasureSpec);

到這里為止了,這種方法不推薦,因為測出來發(fā)現(xiàn)有錯誤。

以上這篇Android中獲取控件寬高的4種方法集合就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 解決TabLayout 不顯示下劃線問題

    解決TabLayout 不顯示下劃線問題

    這篇文章主要介紹了解決TabLayout 不顯示下劃線問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Android 使用騰訊X5瀏覽器上傳圖片的示例

    Android 使用騰訊X5瀏覽器上傳圖片的示例

    這篇文章主要介紹了Android 使用騰訊X5瀏覽器上傳圖片的示例,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • Android Flutter實現(xiàn)自定義下拉刷新組件

    Android Flutter實現(xiàn)自定義下拉刷新組件

    在Flutter開發(fā)中官方提供了多平臺的下拉刷新組件供開發(fā)者使用。本文將改造一下這些組件,實現(xiàn)自定義的下拉刷新組件,感興趣的可以了解一下
    2022-08-08
  • Android打印機--小票打印格式及模板設置實例代碼

    Android打印機--小票打印格式及模板設置實例代碼

    這篇文章主要介紹了Android打印機--小票打印格式及模板設置實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Kotlin協(xié)程之Flow的使用與原理解析

    Kotlin協(xié)程之Flow的使用與原理解析

    Flow是一種數(shù)據(jù)流,可以用于協(xié)程間的通信,具有冷、懶、響應式等特點,Flow是基于協(xié)程構(gòu)建的,可以提供多個值,本文就來給大家講講Kotlin Flow使用與原理,需要的朋友可以參考下
    2023-09-09
  • Android 中raw和assets文件夾的區(qū)別

    Android 中raw和assets文件夾的區(qū)別

    這篇文章主要介紹了Android 中raw和assets文件夾的區(qū)別的相關資料,需要的朋友可以參考下
    2017-04-04
  • Room Kotlin API的使用入門教程

    Room Kotlin API的使用入門教程

    這篇文章主要介紹了Room Kotlin API使用入門教程,幫助大家更好的理解和學習使用并且測試 Room Kotlin API,感興趣的朋友可以了解下
    2021-04-04
  • Jetpack navigation組件超詳細講解

    Jetpack navigation組件超詳細講解

    首先Navigation是一個架構(gòu)組件,因為切換Activity是一個Binder通信的過程,所以Activity是屬于比較重的組件。而Fragment的切換其實只是View的切換,比較輕量級。因此單Activity加Fragment切換成為了比較常見的架構(gòu)方式
    2022-10-10
  • Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法

    Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Android中ImageCropper矩形、圓形 裁剪框的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2018-07-07
  • AndroidStuio插件開發(fā)適用于jetbrains全家桶

    AndroidStuio插件開發(fā)適用于jetbrains全家桶

    這篇文章主要介紹了AndroidStuio插件開發(fā)適用于jetbrains全家桶,本文通過實例給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論