成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android中獲取View寬高的最佳方法

移動開發 Android
使用?ViewTreeObserver?和?OnGlobalLayoutListener」這是獲取控件最終寬高的可靠方法。可以通過給控件添加一個ViewTreeObserver并注冊一個OnGlobalLayoutListener來監聽控件的全局布局變化。

在Android中,獲取View的寬高通常有多種方法,Android的視圖布局和測量是異步進行的,在某些生命周期階段,控件的寬高可能還未確定。以下是獲取控件寬高的幾種常用方法:

  • 「重寫onMeasure方法」如果是自定義View類,可以在onMeasure方法中獲取到控件的寬高。注意onMeasure方法是在測量階段調用的,此時控件的寬高值可能已經通過父控件的布局參數設置或measureSpec確定。
  • 「使用getMeasuredWidth()和getMeasuredHeight()」這兩個方法返回的是控件在測量階段確定的寬高值。如果控件尚未經過測量(例如,在onCreate方法中直接調用),返回的值可能是0。
  • 「使用getWidth()和getHeight()」這兩個方法返回的是控件在布局階段確定的最終寬高值。如果在布局階段之前(例如在onCreate方法中)調用,也可能返回0。
  • 「使用ViewTreeObserver和OnGlobalLayoutListener」這是獲取控件最終寬高的可靠方法。可以通過給控件添加一個ViewTreeObserver并注冊一個OnGlobalLayoutListener來監聽控件的全局布局變化。當控件的布局完成后,OnGlobalLayoutListener的onGlobalLayout方法會被調用,此時可以安全地獲取控件的寬高。

示例代碼:

View view = findViewById(R.id.view);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        int width = view.getWidth();
        int height = view.getHeight(); 
    }
});
  1. 「使用post方法」post方法將一個Runnable對象排隊到主線程的執行隊列中,在控件的繪制階段之后執行。通常用于在控件的布局和繪制完成后執行某些操作,可以通過post方法來延遲獲取控件的寬高。

示例代碼:

View view = findViewById(R.id.view);
view.post(new Runnable() {
    @Override
    public void run() {
        int width = view.getWidth();
        int height = view.getHeight();
    }
});
  • 「使用View.LayoutParams」在某些情況下,可以通過檢查控件的LayoutParams來預測其可能的寬高。通常只適用于那些使用固定尺寸(如WRAP_CONTENT或MATCH_PARENT)或具體尺寸(如dp或px值)的控件。此方式不能保證獲取到的是控件的最終寬高。
  • 「使用onWindowFocusChanged」方法會被調用多次,在View初始化完畢后會調用,當Activity的窗口得到焦點和失去焦點都會被調用一次(例如在Activity onResume時)。

示例代碼:

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

在嘗試獲取控件的寬高時,應該考慮控件的生命周期和布局流程,確保在正確的時機獲取到正確的值。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2017-04-28 09:58:21

AndroidLinearLayou寬高

2021-09-26 08:35:17

Android控件寬高

2025-06-26 08:24:11

AndroidView尺寸消失術

2011-12-27 10:18:31

Web

2011-10-19 16:21:45

2024-08-27 11:12:31

2017-08-21 21:36:23

AndroidViewJava

2014-08-19 10:06:53

IAP

2011-09-01 14:36:38

敏捷

2012-04-11 10:21:54

WEB網站

2012-03-26 10:45:00

虛擬化VMware View數字證書

2017-12-28 14:51:01

AndroidView焦點

2009-06-17 14:36:10

SpringXML配置文件

2009-06-17 14:17:04

SpringXML配置文件

2022-06-28 13:25:19

K8sPrometheusGrafana

2011-05-03 16:09:39

噴頭愛普生

2023-03-02 09:57:03

2010-07-17 15:46:03

WiMAX

2013-11-21 09:17:06

2021-02-07 22:18:28

Windows 10Windows微軟
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色约约视频 | 国内精品久久久久久久影视简单 | 天天色天天色 | 亚洲国产欧美一区 | 99精品99久久久久久宅男 | 欧美日韩久久精品 | 亚洲看片网站 | 国产欧美日韩在线观看 | 精品久久久久久久久久久院品网 | 一区二区三区在线看 | 日韩网| av在线三级 | 国产高清在线 | 视频一二三区 | 日韩精品一区二区三区中文字幕 | 久久亚洲国产 | 久久久久久国产精品免费免费狐狸 | 天天激情综合 | 免费观看av网站 | 精品视频在线免费观看 | 精品久久99 | 国产精品欧美一区喷水 | 九九精品在线 | 日韩欧美一级精品久久 | 能看的av| 欧美精品一区二区在线观看 | 国产一区二区精品在线 | 亚洲欧美中文日韩在线v日本 | 日韩精品免费视频 | 欧美激情精品久久久久 | 国产日韩欧美在线 | 成人毛片一区二区三区 | 欧美精品第三页 | 精品久| 色狠狠一区 | 精品视频在线观看 | 一级视频黄色 | 一区二区国产精品 | 无码一区二区三区视频 | 国产精品国产自产拍高清 | 成人二区 |