1. 程式人生 > >android 中 view 的寬度和高度

android 中 view 的寬度和高度

請轉載的朋友標明出處~~

前言:今天在onCreate 的時候獲取view 的寬度 和 高度,發現結果是0。這就奇怪了,我已經在xml 中配置了高度、寬度了,怎麼會是0呢?度娘給出了答案!但是我還是希望能結合source code來解釋一下原因,所以我跟人小結一下。

首先呢,看一下我試驗的code:

    private void init() {
        int width = mTestView.getWidth();
        int height = mTestView.getHeight();
        Log.d(TAG, "====width =" + width + ", ====height =" + height);
        
        WindowManager wm = this.getWindowManager();
        int window_width = wm.getDefaultDisplay().getWidth();
        int window_height = wm.getDefaultDisplay().getHeight();
        Log.d(TAG, "====window_width =" + window_width + ", ====window_height =" + window_height);
    }
第一次列印是:
D/MainActivity( 2272): ====width =0, ====height =0

改一下:

    private void init() {
        mTestView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        int width = mTestView.getMeasuredWidth();
        int height = mTestView.getMeasuredHeight();
        Log.d(TAG, "====width =" + width + ", ====height =" + height);
        
        WindowManager wm = this.getWindowManager();
        int window_width = wm.getDefaultDisplay().getWidth();
        int window_height = wm.getDefaultDisplay().getHeight();
        Log.d(TAG, "====window_width =" + window_width + ", ====window_height =" + window_height);
    }
列印是:
D/MainActivity( 2386): ====width =157, ====height =41

通過code,可以看出是主動呼叫了measure 的方法做了一次測量,相當於在原基礎上多了一次測量,好處就是可以立即獲取寬度和高度。

下面來具體總結一下其他方式;
方法一:

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

方法二:

//增加元件繪製之前的監聽
ViewTreeObserver vto =view.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        int height =view.getMeasuredHeight();
        int width =view.getMeasuredWidth();
    }
});

方法三:

//增加整體佈局監聽
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
    @Override
    public void onGlobalLayout() {
        view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int height =view.getMeasuredHeight();
        int width =view.getMeasuredWidth();
    }
});


相關推薦

Js 一系列寬度高度的學習

頁面 chrome html5 影響 float 20px 我們 一個 完全   在學習元素一系列寬度和高度之前,我們先來看一個平時開發中幾乎不會遇到的問題,那就是html文檔聲明<!DOCTYPE html> 確實會對元素的寬高產生影響。幾乎不會遇到,是因為我

Android 獲取 螢幕寬度高度——獲取文字高度寬度

獲得螢幕寬度和高度 //直接在子元件中 1、WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVI

Android獲得螢幕寬度高度

//直接在子元件中 1、WindowManager wm = (WindowManager) getContext()                     .getSystemService(Context.WINDOW_SERVICE);        //目前版本已經

android view寬度高度

請轉載的朋友標明出處~~前言:今天在onCreate 的時候獲取view 的寬度 和 高度,發現結果是0。這就奇怪了,我已經在xml 中配置了高度、寬度了,怎麼會是0呢?度娘給出了答案!但是我還是希望能結合source code來解釋一下原因,所以我跟人小結一下。首先呢,看一

Android測量Text的寬度高度

Android中,在自定義View中通過Canvas繪製文字時,經常需要測量文字的寬度和高度。這裡記錄下幾種比較常

android在OnCreate獲取控制元件的寬度高度

在Android中,有時需要對控制元件進行測量,得到的控制元件寬度和高度可以用來做一些計算。在需要自適應螢幕的情況下,這種計算就顯得特別重要。另一方便,由於需求的原因,希望一進入介面後,就能得到控制元件的寬度和高度。 可惜的是,根據我的驗證,利用網上轉載的那些方法在OnCr

android開發如何通過程式碼設定控制元件的寬度高度

原理:通過控制元件的setLayoutParams(params)來設定。而params的型別主要是根據該控制元件的父控制元件的型別來定義的。例如,1、main.xml檔案內容如下:<LinearLayout xmlns:android="http://schemas.

Android獲取View寬度高度

前言:可能很多情況下,我們都會有在activity中獲取view 的尺寸大小(寬度和高度)的需求。面對這種情況,很多同學立馬反應:這麼簡單的問題,還用你說?你是不是傻。。然後立馬寫下getWidth()

Android豎線隨內容高度變化而變化的問題解決辦法

專案中要求顯示豎線,並且豎線高度不確定,豎線的高度要隨著內容的變化而變化。不能使用match_parent 充滿,也不能在佈局中寫死,此時使用 android:layout_height="wrap_content" 將不起作用,反而會充滿整個螢幕。我在網上搜索了一番,關於這個問題只找到了這樣一篇文章 h

CSS將邊框border設定到寬度高度

今天偶遇一個css方面的問題,因為以前也為該問題苦惱過,今天得到了解決方案,而且答案很簡單,就是給css加上一個屬性就搞定了,由於該屬性平時很少用,為了方便以後檢視,特此記錄。 要實現的效果圖 我們想實現如下效果: 一般做法 那麼我們如何

AndroidViewViewGroup的詳細解釋:

Android中View和ViewGroup的詳細解釋 1. 概述: Android系統中的所有UI類都是建立在View和ViewGroup這兩個類的基礎上的。所有View的子類成為”Widget”,所有ViewGroup的子類成為”Layout

AndroidViewViewGroup事件分發攔截機制完美分析

出自:http://www.cnblogs.com/linjzong/p/4191891.html Touch事件分發中只有兩個主角:ViewGroup和View。Activity的Touch事件事實上是呼叫它內部的ViewGroup的Touch事件,可以直接當成Vie

Web前端Table的trtd按百分比設定寬度高度,當內容超出時Table變型解決

如果table按照百分比設定寬度和高度,當表格內部任意內容超出所在元素的百分比值時就會使得表格變形。 <table width='80%'> <tr> <td width='50%'>內容超過50%</td> </tr> </table>

Android獲取螢幕的寬度高度(dp)

    一般我們需要的寬度和高度都是需要dp格式,但是在網上找了一大堆的資料基本上得到的寬度和高度都是畫素(Pixels)型的寬度和高度,與我們所需要的不一樣,後面經過查詢資料終於找到解決辦法,下面上程式碼,老鳥勿噴 public void getAndroiodScr

安卓動態設定控制元件的寬度高度

我們做專案的時候 需要動態設定控制元件的高度,因此該功能是很重要的,下面我介紹一下動態設定控制元件的高度。     LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) password_l

Android ViewAndroidView對觸控事件的處理傳遞dispatchTouchEvent、onInterceptTouchEvent

View中存在dispatchTouchEvent、onTouchEvent兩個方法。 而ViewGroup中則存在dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三個方法。 呼叫順序依次為dispatchTouch

解決 Android View 的 setPivotX setPivotY 不生效的問題以及設定縮放中心的方法

背景是這樣的:有一個需求要對下方的關注按鈕實現如下動畫,動畫的最後要根據滑動位置對關注按鈕進行縮放,縮放結束時整體大小為控制元件原始大小的90%,最終效果圖如下所示(模擬器是 4.2 的系統,最上面的沉浸式有點問題,忽略之): 如圖,關注按鈕向上滑

JavaScript與jQuery獲取螢幕的寬度高度的常用方法以及HTML精確定位

瀏覽器的寬高示意圖: JavaScript中常用的方法: 網頁可見區域寬: document.body.clientWidth 網頁可見區域高: document.body.clientHe

CODEVS 1501二叉樹最大寬度高度

它的 logs nbsp 二叉 ace 最小寬度 最大 -h blog 題目描述 Description 給出一個二叉樹,輸出它的最大寬度和高度。 輸入描述 Input Description 第一行一個整數n。 下面n行每行有兩個數,對於第i行的兩個數

android View, Window, Activity, WindowManager,ViewRoot幾者之間的關系

line 消息傳遞 post att 顯示 增加 調用 eas window對象 (1)View:最主要的UI組件,表示屏幕上的一個矩形區域。 (2)Window: 表示一個窗體,不一定有屏幕那麽大,能夠非常大也能夠非常小;