当前位置: 首页 > wzjs >正文

市总工会网站建设经验材料seo按天计费系统

市总工会网站建设经验材料,seo按天计费系统,石家庄网站建设 河北供求网,潍坊网站建设topAndroid 中获取 View 宽高的几种方式,以及它们的适用场景和注意事项: 1. View.getWidth() 和 View.getHeight() 原理: 直接从 View 对象中获取已经计算好的宽度和高度。 优点: 简单直接。 缺点: 在 onCreate()、onStart() 等生命周期方法中&#xff0…

Android 中获取 View 宽高的几种方式,以及它们的适用场景和注意事项:

1. View.getWidth()View.getHeight()

  • 原理: 直接从 View 对象中获取已经计算好的宽度和高度。

  • 优点: 简单直接。

  • 缺点: onCreate()onStart() 等生命周期方法中,View 可能还没有完成测量,此时获取到的值可能是 0。 通常在 onResume() 之后才能保证获取到正确的值。
    问题本质:

  1. onCreate()setContentView() 仅加载布局,未开始测量。
  2. onStart()/onResume():界面可见,但测量可能仍未完成(尤其是复杂布局或异步数据加载时)。
  • 适用场景: 在 View 已经完成布局之后,需要获取其宽高时使用。例如,在用户交互事件(如点击事件)中,或者在 onWindowFocusChanged(boolean hasFocus) 方法中。

  • 代码示例:

    @Override
    protected void onResume() {super.onResume();int width = myView.getWidth();int height = myView.getHeight();Log.d("ViewSize", "Width: " + width + ", Height: " + height);
    }
    

    2. View.getMeasuredWidth()View.getMeasuredHeight()

  • 原理: 获取 View 的测量宽度和测量高度。 View 在布局过程中会经过测量阶段,getMeasuredWidth()getMeasuredHeight() 返回的就是测量阶段计算出的宽高

  • 优点:getWidth()getHeight() 更早获取到 View 的宽高信息。

  • 缺点: 测量宽高可能与最终显示的宽高不同 例如,如果 View 的 layout_widthlayout_height 设置为 wrap_content,并且父容器对其进行了限制,那么测量宽高可能只是一个预估值。 此外,如果 View 进行了重新测量,getMeasuredWidth()getMeasuredHeight() 的值也会发生变化。

  • 适用场景: 在 View 还没有完全布局完成,但需要提前知道其大致宽高信息时使用。例如,在自定义 View 的 onMeasure() 方法中。

  • 代码示例:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int measuredWidth = getMeasuredWidth();int measuredHeight = getMeasuredHeight();Log.d("ViewSize", "Measured Width: " + measuredWidth + ", Measured Height: " + measuredHeight);
    }
    

    3. ViewTreeObserver.OnGlobalLayoutListener

  • ViewTreeObserver.OnGlobalLayoutListener 是 Android 中用于监听 视图树(ViewTree)全局布局变化 的接口,常用于在 View 完成测量和布局后 获取其宽高、位置等属性。

  • 优点: 可以保证在 View 已经完成布局之后获取到正确的宽高值 即使 View 的宽高在布局过程中发生了变化,也能及时获取到最新的值。

  • 缺点: 需要注册监听器,并且在获取到宽高后需要移除监听器,否则会造成性能问题。

  • 适用场景: 需要在 View 布局完成后立即获取其宽高,并且需要保证获取到的值是准确的。

  • 代码示例:

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myView = findViewById(R.id.my_view);ViewTreeObserver vto = myView.getViewTreeObserver();vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {myView.getViewTreeObserver().removeOnGlobalLayoutListener(this);int width = myView.getWidth();int height = myView.getHeight();Log.d("ViewSize", "Width: " + width + ", Height: " + height);}});
    }
    

    4. View.post(Runnable)

  • 原理: 将一个 Runnable 对象添加到 View 的消息队列中,该 Runnable 对象会在 View 布局完成后执行。

  • 优点: 可以保证在 View 已经完成布局之后获取到正确的宽高值,并且代码简洁。

  • 缺点: 相对于 OnGlobalLayoutListener,可能稍微延迟一点执行

  • 适用场景: 需要在 View 布局完成后立即获取其宽高,并且对执行时间要求不高。

  • 代码示例:

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myView = findViewById(R.id.my_view);myView.post(new Runnable() {@Overridepublic void run() {int width = myView.getWidth();int height = myView.getHeight();Log.d("ViewSize", "Width: " + width + ", Height: " + height);}});
    }
    

    5. View.addOnLayoutChangeListener(OnLayoutChangeListener) (API Level 11+)

  • 原理: 监听 View 的布局变化。 当 View 的布局发生改变时,onLayoutChange() 方法会被调用。

  • 优点: 可以监听 View 的布局变化,并在布局变化后获取最新的宽高值。

  • 缺点: 只在 API Level 11 及以上可用。

  • 适用场景: 需要在 View 布局变化后立即获取其宽高,并且需要监听 View 的布局变化。

  • 代码示例:

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myView = findViewById(R.id.my_view);myView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {@Overridepublic void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {int width = myView.getWidth();int height = myView.getHeight();Log.d("ViewSize", "Width: " + width + ", Height: " + height);}});
    }
    

http://www.dtcms.com/wzjs/78653.html

相关文章:

  • 澳大利亚网站后缀怎么用网络推广业务
  • 生态建设研究所网站百度推广客户端下载安装
  • 武汉网站建设哪里找意向客户seo对网站优化
  • 网站空间信息查询如何自己创建网址
  • wordpress post_content品牌seo推广咨询
  • 电脑手机网站相互跳转电商网站开发平台
  • 网站的推广等内容百度大搜数据多少钱一条
  • 让别人做网站如何防止后门免费发布推广的平台有哪些
  • 水果网站首页设计美国站外推广网站
  • 四川聚顺成网络科技有限公司个人seo怎么赚钱
  • 上海注册公司核名网站东莞网络营销全网推广
  • 河南建达工程建设监理公司网站百度推广做二级域名
  • 做商城网站那个好seo监控
  • 陕西找人做网站多少钱google chrome 网络浏览器
  • 云南省和城乡建设厅网站百度指数网页版
  • 北京别墅设计网站网站提交百度收录
  • 网站建设策划书怎么写搜索优化是什么意思
  • 工业设计网站下载萧山市seo关键词排名
  • 如何建设公司网络营销网站优化关键词怎么做
  • 可以做头像的网站seo是什么
  • 有需要做网站的吗网店推广方式
  • 创建一个网站需要怎么做品牌策划方案
  • 招聘公司怎么做网站网络推广策划案
  • 框架网站怎么做广州30万人感染
  • 网站建设公司加盟百度店面定位怎么申请
  • 新网站收录多少关键词教育培训机构平台
  • 新乡做网站推广公司网页怎么做
  • 网站建设定金做什么会计分录谷歌排名优化入门教程
  • 中国建设银行太原招聘信息网站5118素材网站
  • 淘宝网站建设成本网络公司seo教程