欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

最简单也最难——如何获取到Android控件的高度,获取android控件

发布时间:2025/6/15 Android 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 最简单也最难——如何获取到Android控件的高度,获取android控件 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

最简单也最难——如何获取到Android控件的高度,获取android控件


问题

如何获取一个控件的长和高,相信很多朋友第一眼看见这个问题都会觉得很简单,直接在onCreate里面调用getWidth、getMeasuredWidth不就可以获得了吗,但是,事实上是并没有简单的,不信的话,你可以去试一下,在onCreate里面,你是无法获得长宽值的,始终为0。

原因

这是为什么呢,其实熟悉view绘制流程的朋友应该一眼就看出来了,在onCreate中,我们的控件其实还并没有画好,换句话说,等onCreate方法执行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。

解决

No1:

int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);imageView.measure(w, h);int height = imageView.getMeasuredHeight();int width = imageView.getMeasuredWidth();
这种方法很简单,就是我们自己来测量


No2:

ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { vto.removeOnPreDrawListener(this);int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); return true; } });

这个方法,我们需要注册一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听绘图的,既然是监听绘图,那么我们自然可以获取测量值了,同时,我们在每次监听前remove前一次的监听,避免重复监听。


No3:

ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); imageView.getHeight();imageView.getWidth();} });
这个方法于第2个方法基本相同,但他是全局的布局改变监听器,所以是最推荐使用的。


OK,现在看来,看似简单问题也不是那么简单吧。

以上。


怎得到控件的宽 高 android

有两种情况,
1,当页面还未显示出来的时候,获取控件宽高的方式有
ViewTreeObserver viewTreeObserver = mView.getViewTreeObserver();

viewTreeObserver.addOnPreDrawListener(....);
在监听函数中获取控件的宽高就行了,
2,当页面画完了,也就是最简单的的直接
mView.getWidth()和mView.getHeight()就行了
 

android 怎动态设置控件的宽度与高度

android中的控件如果在xml布局文件中把控件的layout_width和layout_height写成固定值了,好像就不能再在程序中更改该控件的高度和宽度了,不知哪位大侠有何良策可以指教一二,如xml文件内容如下:<LinearLayoutandroid:id="@id/dialog_bottom_neutral"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:gravity="center"&lt;Buttonandroid:id="@id/dialog_bottom_neutral_button"android:layout_width="80.0dip"android:layout_height="28.0dip"android:background="@drawable/dlg_button"android:gravity="center"android:singleLine="true"android:text="mid"android:textColor="@drawable/dlg_button_text_color"android:textSize="14.0sp" /小弟在程序中使用button.width和button.height设置没用,用LayoutParmas设置也没用

总结

以上是生活随笔为你收集整理的最简单也最难——如何获取到Android控件的高度,获取android控件的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。