Java 为什么膨胀的ImageView的高度和宽度为0?

Java 为什么膨胀的ImageView的高度和宽度为0?,java,android,android-layout,user-interface,imageview,Java,Android,Android Layout,User Interface,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" android:paddingBottom="@dimen/ac

这是我的布局文件,我从中放大了图像视图

<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.Tamaritz.dailyselfie.MainActivity" >
<ImageView
    android:id="@+id/selfieImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/abc_ab_bottom_solid_dark_holo" />
<TextView
    android:id="@+id/timestamp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/selfieImage"
    />
我基本上是想利用Android View holder的模式。如果convertView为null,则表示它之前未充气,无法重用,因此我们应该采取步骤充气。我将膨胀视图传递到构造函数中,以便该视图能够找到其图像视图和文本视图。我的问题是,在图像视图已膨胀并连接到视图支架后,为什么它的高度和宽度为0?请了解这一点,因为我已完成了代码。这些值是实际值很重要,因为我需要在的setPic方法中使用它们

我查看了我的问题的其他可能的线程。 此人也有类似的问题,但从未得到答案。 这不可能是我的问题,因为UI应该已经绘制好了。我不能在onCreate中调用它 不可能是这样的,因为我没有在ImageView的构造函数中调用高度和宽度 而不是这个,因为我确保指定了一个父对象


有人知道为什么高度和宽度返回0吗?我可以在xml文件中硬编码高度和宽度,但我认为这是一种糟糕的风格。

我现在有一台计算机为您测试。这就是我所尝试的:我的getView方法的内部部分是这样的,它可以成功地记录imageview的宽度和高度。这只是尝试实现您想要实现的目标:在getView方法内部获得imageview的宽度和高度。我不知道这是不是一个好的做法。因此,使用它的风险由你自己承担。不过,我建议您在xml中定义大小。这取决于你的要求

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View selfieImage = convertView;
            final ViewHolder holder;
            if (selfieImage == null) {
                LayoutInflater inflater = (LayoutInflater) parent
                        .getContext().getSystemService(
                                Context.LAYOUT_INFLATER_SERVICE);
                selfieImage = inflater.inflate(R.layout.widget_sample_item,
                        parent, false);
                holder = new ViewHolder(selfieImage);

                selfieImage.setTag(holder);

            } else {
                holder = (ViewHolder) selfieImage.getTag();
            }

            holder.timestamp.setText("this is: " + position + "th child");

            selfieImage.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);

            int height = holder.selfieImage.getMeasuredHeight();
            int width = holder.selfieImage.getMeasuredWidth();
            Log.d("image-info", width + " | " + height);

            return selfieImage;
        }

我想这就是你想要的:哦,谢谢你!!!。真不敢相信我没有找到那一个。在getView之后会绘制视图吗?
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View selfieImage = convertView;
            final ViewHolder holder;
            if (selfieImage == null) {
                LayoutInflater inflater = (LayoutInflater) parent
                        .getContext().getSystemService(
                                Context.LAYOUT_INFLATER_SERVICE);
                selfieImage = inflater.inflate(R.layout.widget_sample_item,
                        parent, false);
                holder = new ViewHolder(selfieImage);

                selfieImage.setTag(holder);

            } else {
                holder = (ViewHolder) selfieImage.getTag();
            }

            holder.timestamp.setText("this is: " + position + "th child");

            selfieImage.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);

            int height = holder.selfieImage.getMeasuredHeight();
            int width = holder.selfieImage.getMeasuredWidth();
            Log.d("image-info", width + " | " + height);

            return selfieImage;
        }