ImageView高度始终为0

时间:2014-05-13 13:48:18

标签: android android-imageview

我正在尝试获取我的imageview的高度和宽度,以便我可以按照适当的大小缩放我的图像,但每当我尝试获得高度时,我得到的高度为0.我想也许它还没有被测量所以我在imageview上放了一个onPreDrawListener,以便我知道它会在那时被测量但是我仍然得到0所以我不确定这个问题。

这是我的完整布局

<?xml version="1.0" encoding="utf-8"?>

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:id="@+id/content"
        android:layout_above="@+id/comment_layout">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imageView"/>

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/comments"
            android:background="@android:color/transparent"/>

    </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/comment_layout">

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/editText"
                android:layout_alignParentBottom="true"
                android:layout_toLeftOf="@+id/send_button"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/send_button"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"/>

        </RelativeLayout>

</RelativeLayout>

这是我试图获得高度的地方

ViewTreeObserver obs = imageView.getViewTreeObserver();
        if(obs != null){
            obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    if(image != null){
                        imageView.getViewTreeObserver().removeOnPreDrawListener(this);
                        int height = imageView.getHeight(); // 0
                        int width = imageView.getWidth(); // 720
                    }
                    return false;
                }
            });
        }

宽度显示720但高度始终显示为0.

放入硬宽度也没有效果

1 个答案:

答案 0 :(得分:1)

这应该与OnGlobalLayoutListener一样适用

    final ImageView image = new ImageView(this);
    image.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            // TODO Auto-generated method stub
            int height = image.getHeight();
        }
    });

当全局布局状态或可见性更改

时,将调用此回调