获取一个控件的高度与宽度的正确方法
来源:互联网 发布:python gb2312转utf8 编辑:程序博客网 时间:2024/06/08 15:18
获取一个控件的高度与宽度的正确方法
我们知道在oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件布局要在onResume回调后完成。很多人认为,View.measure(0,0),然后调用view.getMeasureHeight和view.getMeasureWidth就可以获取控件的高度与宽度,事实是这样么?没有试验就没有发言权,下面我们来测试一下。
activity_main.xml代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="500dp" android:layout_height="500dp" android:orientation="horizontal" ></LinearLayout>
MainActivity.java代码:
package com.example.androidtest2_2_2_1;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.LinearLayout;public class MainActivity extends Activity { private LinearLayout ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ll = (LinearLayout) findViewById(R.id.container); ll.measure(0,0); int height = ll.getMeasuredHeight(); int width = ll.getMeasuredWidth(); Log.e("测试:", width+","+height); }}
结果截图:
我们看到结果截图显然不能得到我们想要的东西的,说明该写法也是不行的。
下面还有一个方法,也是网上看到的,先看下代码。
MainActivity.java代码:
package com.example.androidtest2_2_2_1;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.LinearLayout;public class MainActivity extends Activity { private LinearLayout ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ll = (LinearLayout) findViewById(R.id.container); int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.EXACTLY); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.EXACTLY); ll.measure(w,h); int height = ll.getMeasuredHeight(); int width = ll.getMeasuredWidth(); Log.e("测试:", width+","+height); }}
结果截图:
上面我用的是View.MeasureSpec.EXACTLY,因为我的LinearLayout的高度和宽度用的都是精确值。从结果来看,该方法显然是不行的。
目前,还有一种方法是可行的,就是用addOnGlobalLayoutListener来获取控件的高度与宽度,因为该方法默认是被调用两次,所以调用一次后需要移除该监听。
MainActivity.java代码:
package com.example.androidtest2_2_2_1;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.LinearLayout;public class MainActivity extends Activity { private LinearLayout ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ll = (LinearLayout) findViewById(R.id.container); ll.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub ll.getViewTreeObserver().removeGlobalOnLayoutListener(this); Log.e("测试:", ll.getMeasuredHeight()+","+ll.getMeasuredWidth()); } }); }}
运行结果:
阅读全文
1 0
- 获取一个控件的高度与宽度的正确方法
- 获取屏幕或者控件的宽度高度
- android 获取控件的高度或者宽度。
- GDI 与 GDIPlus 获取文字宽度和高度的方法
- 在onCreate()方法中获取View的宽度与高度
- Android中获取屏幕高度与宽度的方法.
- 如何正确获取Android控件的高度
- Javascript页面宽度高度的获取方法
- 获取远程图片宽度高度的方法
- 获取屏幕高度和宽度 的方法
- Android 获取控件高度宽度三种方法,防止0的出现,计算空间宽度,文字宽度
- 常见的宽度与高度获取
- h264 图像宽度与高度的获取
- h264 图像宽度与高度的获取
- jquery获取窗口的高度与宽度
- Bitmap获取图片的高度与宽度
- 【原】获取控件的绝对位置控件宽度和高度
- 获取控件的宽度和高度的像素值的四种方法
- 教你怎么客观评价程序员的水平?
- QT中char[]和int拼接成字符串
- sqlplus:Permission Denied
- vue入门第一课
- BOM
- 获取一个控件的高度与宽度的正确方法
- 市场研究中的数据分析知识整理 (九)-联合分析
- [Scala]Scala学习笔记八 高阶函数
- 下载spring开源框架不同版本verison的地址和方法
- Java基础——前辈给我的忠告
- mybatis自学习(一)
- 以形而上学的概念理解计算机科学
- 事件
- WebAssembly入门介绍书目录