Android中如何获得控件的尺寸

在Android开发中,由于控件在onCreate时未完成度量,直接调用getWidth、getMeasuredWidth等方法会返回0。文章通过测试分析,推荐在ViewTreeObserver的onPreDraw或全局布局改变监听器中获取控件尺寸,以确保得到正确的值。
摘要由CSDN通过智能技术生成

1。发现问题

在做一个GPS相关的应用,过程中需要测量地球控件的大小尺寸,通过调用getWidth、getMeasuredWidth等方法都试过了,发现得到的结果都是0。反复检查都没发现错误,为什么呢?

2。深究原因

发现了问题,当然就要先分析原因了。经过一翻了解,原来在onCreate中,我们的控件其实还并没有画好,换句话说,等onCreate方法执行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getWidth()获取控件的宽度肯定是0。

3。测试

针对这个问题,在网上有很多的解决方法,想真正了解,自己当然也要试上一试,才知道效果是怎样,那种方法更好。下面上代码
布局很简单,就一个ImageView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView 
        android:id="@+id/img"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:src="@drawable/bbb"
        android:background="#000000"
        android:layout_centerInParent="true"/>

</RelativeLayout>

下面是用于测试的代码,其中有几个方法,分别测试图片大小,和1~5种方法测试ImageView控件的大小:

package com.wuxianxi.test;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {
   
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        img = (ImageView) findViewById(R.id.img);

        getImageSize();
        getSizeOne();
        getSizeTwo();
        getSizeThree();
        getSizeFour();
        getSizeFive();
    }

    private
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值