1. 程式人生 > >Android UI繪製完成的標誌及如何合理地獲取螢幕的寬高

Android UI繪製完成的標誌及如何合理地獲取螢幕的寬高

當我們需要獲取螢幕的寬高時,一般情況是不能再onCreate和onResume方法中獲取的,因為這個時候介面還沒有繪製完成,大部分情況下獲取到的都是0。

這裡有兩個解決方法:

一個是重寫Activity中的onWindowFocusChanged方法,在onWindowFocusChanged方法中獲取,引數hasFocus為true時表示當前Activity獲取到了焦點。

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            Display display = getWindowManager().getDefaultDisplay();
            DisplayMetrics metrics = new DisplayMetrics();
            display.getMetrics(metrics);
            int width = metrics.widthPixels;
            int height = metrics.heightPixels;
            Log.i(TAG, "onWindowFocusChanged: " + width + height);
        }
    }
問題在於,當前Activity獲取到焦點(HasFocus為true)和失去焦點(HasFocus為false)的時候就會執行這個方法,比如下拉通知欄等,會帶來一些問題。

另一個就是在onCreate和onResume裡使用Handler.postDelay方法了。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_empty);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Display display = getWindowManager().getDefaultDisplay();
                DisplayMetrics metrics = new DisplayMetrics();
                display.getMetrics(metrics);
                int width = metrics.widthPixels;
                int height = metrics.heightPixels;
                Log.i(TAG, "onWindowFocusChanged: " + width + height);
            }
        }, 500);
    }






相關推薦

Android UI繪製完成標誌如何合理獲取螢幕

當我們需要獲取螢幕的寬高時,一般情況是不能再onCreate和onResume方法中獲取的,因為這個時候介面還沒有繪製完成,大部分情況下獲取到的都是0。 這裡有兩個解決方法: 一個是重寫Activit

Android螢幕適配3-動態獲取螢幕動態設定控制元件

1、問題 在螢幕適配中,要求應用在不同的螢幕上顯示一樣的效果時,我們的佈局可以採用百分比來定位,也就是 layout_weight,但對於一些層層巢狀或更加複雜的情況下,使用百分比的效果並不是很好,頁無法解決一些問題,比如文字大小。 2、解決思路 我們

android獲取螢幕獲取控制元件

// 獲取螢幕寬高(方法1) int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 螢幕寬(畫素,如:480px) int screenHeight = getWindowManager().getDe

Android獲取螢幕,狀態列,actionbar,layout,導航欄高度的方法彙總

看這個部落格你可以知道 獲取螢幕寬高,狀態列寬高,actionbar寬高,layout寬高,導航欄(虛擬按鍵欄)高度的方法   目錄順序為 程式碼測試的機型 狀態列高度 actionbar高度 螢幕高度 導航欄(虛擬按鍵欄)高度 layout寬高 總

Android UI繪製流程原理

一、繪製流程原始碼路徑 1、Activity載入ViewRootImpl ActivityThread.handleResumeActivity() --> WindowManagerImpl.addView(decorView, layoutParams) --> WindowManager

Android UI繪製 -- 螢幕適配

#重要概念 螢幕尺寸 手機對角線的物理尺寸,單位英寸。 常見的有:5寸、5.5寸、6寸等 螢幕解析度 手機在橫向、縱向上的畫素點數總和,單位px。 常見的有:1080x1980、720x1280/480x800等 螢幕畫素密度 每英寸的畫素點數,單位dpi。

Android UI繪製

基礎知識 measure MeasureSpecs MeasureSpecs維護一個int型(32bit)資料,其中2bit表示mode,30bit表示size size = MeasureSpec.getSize(measureSpec) mode = Me

Android UI效能專項測試優化

1 UI卡頓(Jank) 內容的快速載入很重要,渲染的流暢性也很重要。android團隊把滯緩,不流暢的動畫定義為jank,一般是由於丟幀引起的。安卓裝置的螢幕重新整理率一般是60幀每秒(1/60fps=16.6ms每幀),所以你想要渲染的內容能在16ms內完

Android-UI開發之AdapterAdapter控制元件

一.Adapter的概述 ArrayAdapter SimpleAdapter SimpleCursorAdapter BaseAdapter及自定義Adapter Adapter控制元件 1.Adapter介面卡 Adapter物件在Adapt

經常用到的Android UI、開源專案

 README.mdTimLiu-Android目錄具體內容 =============================UIAwesome-MaterialDesign - MaterialDesignCenter改名為Awesome-MaterialDesign,優化了佈局,新增了不少庫。ChipsLibr

android螢幕適配的全攻略3-動態獲取手機螢幕動態設定控制元件

1.獲取手機螢幕寬高: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.width

最全的獲取元素位置的方法

offsetWidth / offsetHeight offsetWidth HTMLElement.offsetWidth 是一個只讀屬性,返回一個元素的佈局寬度。一個典型的(各瀏覽器的offsetWidth可能有所不同)offsetWidth是測量包含元素的邊框(border)、水平線上的內邊距(pa

JS實現圖片的預覽預覽圖片的獲取

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>圖片預覽</title> </head> <style

Android 獲取layout之前呼叫View.measure(0,0)的原因

private ConstraintLayout constraintLayout; constraintLayout=findViewById(R.id.screen_test); constraintLayout.measure(0,0); Log.i(TAG,"onCreate:"+const

最全面的獲取元素位置的方法

HTMLElement.offsetWidth 是一個只讀屬性,返回一個元素的佈局寬度。一個典型的(各瀏覽器的offsetWidth可能有所不同)offsetWidth是測量包含元素的邊框(border)、水平線上的內邊距(padding)、豎直方向滾動條(

android onCreate中獲取view為0的多種解決方法

  這個問題大家肯定遇到過不止一次,其實很簡單,解決它也很容易,但是咱們追求的畢竟不是解決它,而是找到幾種方法去解決,並且這麼解決的原理是什麼。   這裡列出4種解決方案: Activity/View#onWindowFocusChanged   這個函式

C#:視窗大小,電腦螢幕,程式的退出 窗體顯示位置、窗體顯示在最前 設定

1。直接上程式碼 using Microsoft.VisualBasic; using System; using System.Threading; using System.Windows.Forms; namespace WindowsFormsApp13 { public pa

android 螢幕那點事

  目錄 寬高的獲取方式 導航欄的高度獲取及導航欄監聽 寬高的獲取方式     1.  DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager

Android獲取View方法

Android開發中經常需要獲取控制元件的寬高,比如前不久我在寫一個圖片載入庫時,因為需要對Bitmap進行裁剪就遇到了需要獲取ImageView寬高的問題。 如果稍微瞭解過一下View的繪製過程,就會知道直接在onCreate()等生命週期回撥方法中獲取寬高,獲取到的值是0

Android獲取螢幕

WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefault