zoukankan      html  css  js  c++  java
  • Android -- 获取View宽高

    在activity中可以调用View.getWidth、View.getHeight()、View.getMeasuredWidth() 、View.getgetMeasuredHeight()来获得某个view的宽度或高度,但是在onCreate()、onStrart()、onResume()方法中会返回0,这是应为当前activity所代表的界面还没显示出来没有添加到WindowPhone的DecorView上或要获取的view没有被添加到DecorView上或者该View的visibility属性为gone 或者该view的width或height真的为0 ,所以只有上述条件都不成立时才能得到非0的width和height。

    View的事件回调里使用

    这时候该view已经被显示即被添加到DecorView上  如点击事件  触摸事件   焦点事件等

    View view=findViewById(R.id.tv);  
        view.setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                int width = v.getWidth();  
            }  
        });

    onWindowFocusChanged() 回调

    在activity被显示出来时即添加到了DecorView上时获取宽和高如onWindowFocusChanged() 回调方法

    @Override  
    public void onWindowFocusChanged(boolean hasFocus) {  
        View iv1 = findViewById(R.id.iv1);  
        View iv2=findViewById(R.id.iv2);  
        String msg1="iv1' "+iv1.getWidth()+" height:"+iv1.getHeight()+"      measuredWidth:"+iv1.getMeasuredWidth()+"measuredHeight:"+iv1.getMeasuredHeight();  
        String msg2="iv2' "+iv2.getWidth()+" height:"+iv2.getHeight()+"      measuredWidth:"+iv2.getMeasuredWidth()+"measuredHeight:"+iv2.getMeasuredHeight();  
        Log.i("onWindowFocusChanged() "+msg1);  
        Log.i("onWindowFocusChanged() "+msg2);  
        super.onWindowFocusChanged(hasFocus);  
    }

    延时

    在onResume方法最后开线程300毫秒左右后获取宽和高   因为onResume执行完后300毫秒后,界面就显示出来了。

    view.postDelayed(new Runnable() {  
                  
                @Override  
                public void run() {  
                    View iv1 = findViewById(R.id.iv1);  
                    View iv2=findViewById(R.id.iv2);  
                    String msg1="iv1' "+iv1.getWidth()+" height:"+iv1.getHeight()+"  measuredWidth:"+iv1.getMeasuredWidth()+"measuredHeight:"+iv1.getMeasuredHeight();  
                    String msg2="iv2' "+iv2.getWidth()+" height:"+iv2.getHeight()+"  measuredWidth:"+iv2.getMeasuredWidth()+"measuredHeight:"+iv2.getMeasuredHeight();  
                    Log.i("onWindowFocusChanged() "+msg1);  
                    Log.i("onWindowFocusChanged() "+msg2);  
                }  
            }, 300);

    在onCreate()或onResume()等方法中需要

    getViewTreeObserver().addOnGlobalLayoutListener()来添为view加回调在回调里获得宽度或者高度获取完后让view删除该回调

    view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  
              
            @Override  
            public void onGlobalLayout() {  
                view.postDelayed(new Runnable() {  
                      
                    @Override  
                    public void run() {  
                        View iv1 = findViewById(R.id.iv1);  
                        View iv2=findViewById(R.id.iv2);  
                        String msg1="iv1' "+iv1.getWidth()+" height:"+iv1.getHeight()+"  measuredWidth:"+iv1.getMeasuredWidth()+"measuredHeight:"+iv1.getMeasuredHeight();  
                        String msg2="iv2' "+iv2.getWidth()+" height:"+iv2.getHeight()+"  measuredWidth:"+iv2.getMeasuredWidth()+"measuredHeight:"+iv2.getMeasuredHeight();  
                        Log.i("onWindowFocusChanged() "+msg1);  
                        Log.i("onWindowFocusChanged() "+msg2);  
                    }  
                }, 300);  
            }  
        });

    我是天王盖地虎的分割线

    参考:http://blog.csdn.net/nailsoul/article/details/25909313

  • 相关阅读:
    vue-cli element axios sass 安装
    Rem-- ui图与适配手机的px换算
    REM
    Canvas画半圆扇形统计图
    在vue中安装SASS
    在vue中引用.SCSS的公用文件
    Echart--折线图手柄触发事件
    vue 脚手架webpack打包后,解决能看到vue源码的问题
    js 函数 /变量/ 以及函数中形参的预解析的顺序
    【算法日记】4.递归和快速排序
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4474217.html
Copyright © 2011-2022 走看看