Android中如何获取控件宽高的4种方法是什么?

Android中获取控件宽高的4种方法包括:直接使用getWidth()和getHeight()方法,但需在布局完成后调用;重写onWindowFocusChanged()方法,在焦点变化时获取;添加OnPreDrawListener或OnGlobalLayoutListener监听布局变化;以及通过post方法延迟到绘制阶段后获取。

在Android开发中,获取控件宽高是常见的需求,由于Activity的启动流程和布局文件的加载流程是异步进行的,在onCreate()或onResume()方法中直接使用getWidth()和getHeight()方法获取控件的宽高通常会得到0,开发者需要采用其他方法来确保能够正确获取控件的宽高,以下是几种常用的方法:

Android中如何获取控件宽高的4种方法是什么?

1、重写onWindowFocusChanged()方法

描述:重写onWindowFocusChanged()方法,当Activity的窗口焦点发生变化时调用该方法。

实现步骤

a. 在onWindowFocusChanged()方法中添加判断,如果当前页面有焦点(hasFocus为true),则获取控件的宽高。

b. 示例代码如下:

         @Override
         public void onWindowFocusChanged(boolean hasFocus) {
             super.onWindowFocusChanged(hasFocus);
             if (hasFocus) {
                 getTextWidthHeight();
             }
         }

c. 需要注意的是,这个方法可能会执行多次,比如锁屏、切到后台等重新进入时都会执行该方法。

2、添加OnPreDrawListener事件监听

描述:通过给控件添加OnPreDrawListener事件监听器,在控件绘制前获取宽高。

实现步骤

a. 获取DecorView的ViewTreeObserver对象。

Android中如何获取控件宽高的4种方法是什么?

b. 添加OnPreDrawListener监听器。

c. 在onPreDraw()方法中获取控件的宽高,并移除监听器。

d. 示例代码如下:

         getWindow().getDecorView().getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
             @Override
             public boolean onPreDraw() {
                 getTextWidthHeight();
                 getWindow().getDecorView().getViewTreeObserver().removeOnPreDrawListener(this);
                 return false;
             }
         });

3、添加OnGlobalLayoutListener事件监听

描述:通过给控件添加OnGlobalLayoutListener事件监听器,在控件全局布局完成后获取宽高。

实现步骤

a. 获取DecorView的ViewTreeObserver对象。

b. 添加OnGlobalLayoutListener监听器。

c. 在onGlobalLayout()方法中获取控件的宽高,并移除监听器。

d. 示例代码如下:

Android中如何获取控件宽高的4种方法是什么?

         getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
             @Override
             public void onGlobalLayout() {
                 getTextWidthHeight();
                 getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
             }
         });

4、post Runnable方式

描述:使用post方法将一个Runnable对象排队到主线程的执行队列中,在控件的绘制阶段之后执行。

实现步骤

a. 获取控件对象。

b. 调用控件的post方法,传入一个Runnable对象。

c. 在Runnable对象的run方法中获取控件的宽高。

d. 示例代码如下:

         textView.post(new Runnable() {
             @Override
             public void run() {
                 getTextWidthHeight();
             }
         });

以下是上述四种方法的比较表格:

方法名称 描述 实现步骤 注意事项
重写onWindowFocusChanged()方法 重写onWindowFocusChanged()方法,当Activity的窗口焦点发生变化时调用该方法。 1. 在onWindowFocusChanged()方法中添加判断,如果当前页面有焦点(hasFocus为true),则获取控件的宽高。 这个方法可能会执行多次,比如锁屏、切到后台等重新进入时都会执行该方法。
添加OnPreDrawListener事件监听 通过给控件添加OnPreDrawListener事件监听器,在控件绘制前获取宽高。 1. 获取DecorView的ViewTreeObserver对象。
2. 添加OnPreDrawListener监听器。
3. 在onPreDraw()方法中获取控件的宽高,并移除监听器。
添加OnGlobalLayoutListener事件监听 通过给控件添加OnGlobalLayoutListener事件监听器,在控件全局布局完成后获取宽高。 1. 获取DecorView的ViewTreeObserver对象。
2. 添加OnGlobalLayoutListener监听器。
3. 在onGlobalLayout()方法中获取控件的宽高,并移除监听器。
post Runnable方式 使用post方法将一个Runnable对象排队到主线程的执行队列中,在控件的绘制阶段之后执行。 1. 获取控件对象。
2. 调用控件的post方法,传入一个Runnable对象。
3. 在Runnable对象的run方法中获取控件的宽高。

Android中获取控件宽高有多种方法,每种方法都有其适用的场景和注意事项,开发者可以根据具体的需求选择合适的方法来获取控件的宽高。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1259639.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希的头像未希新媒体运营
上一篇 2024-11-02 03:13
下一篇 2024-02-13 18:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入