Android在onCreate中获取元件大小

  大部分的安卓开发者都会遇到在onCreate方法中来获取元件的宽高来进行一些处理,但是遗憾的是得到的所有结果都是0,这是由于安卓的渲染模式决定的,在元件创建但未显示时无法获取元件的固定宽高,在这里分享一下在onCreate方法中获取元件宽高的几种方法:

方法一:

     /**
         * 测量方法 获取组件的尺寸大小
         * 
         */
        int width = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
        int height = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
        button.measure(width,height); 
        int buttonHeight = button.getMeasuredHeight(); 
        int buttonWidth = button.getMeasuredWidth();
        Log.e(Tag,"计算方法获取组件大小button.width = " + buttonWidth + "   button.height = " + buttonHeight);

方法二:

     /**
         * 增加整体布局监听
         * 
         */
        ViewTreeObserver vto2 = button.getViewTreeObserver();  
        vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
        {
            @Override
            public void onGlobalLayout()
            {
                button.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                int height =button.getMeasuredHeight();
                int width =button.getMeasuredWidth();
                Log.e(Tag,"整体布局监听获取组件大小button.width = " + width + "   button.height = " + height);
                TextView tv = new TextView(MainActivity.this);
                tv.setText("Hello World!");
                tv.setTextColor(Color.RED);
                tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                layout.addView(tv);
            }
        });

方法三:

     /**
         * 增加组件绘制监听方法(该方法有时无效,具体原因未知)
         * 
         */
        ViewTreeObserver vto = button.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
        {
            @Override
            public boolean onPreDraw()
            {
                // TODO Auto-generated method stub
                int height = button.getMeasuredHeight();
                int width = button.getMeasuredWidth();
                Log.e(Tag,"组件绘制监听获取组件大小button.width = " + width + "   button.height = " + height);
                return true;
            } 
        });

 

其实还有一个非常好的方法,独立于我们所了解的安卓生命周期之外,在onResume方法之后,Activity还会调用public void onWindowFocusChanged(boolean hasFocus)这个方法,你会神奇的发现,在这个方法里面所有你想要的元件尺寸没有你得不到的,但是该方法在每次窗口焦点改变时都会调用,善用该方法,会有你意想不到的效果。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。