繁体   English   中英

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

[英]Why does my inflated ImageView have a height and width of 0?

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

<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"
    />

这是我的基本适配器中的代码,该代码会将此布局文件充入具有视图持有人类(内部静态类)的视图对象

    static class ViewHolder {
            ImageView selfieImage;
            TextView timestamp;
            public ViewHolder(View selfieLayout) {
                       selfieImage = (ImageView) selfieLayout.findViewById(R.id.selfieImage);
                      timestamp = (TextView) selfieLayout.findViewById(R.id.timestamp);
             }
    }
   ....
    public View getView(int position, View convertView, ViewGroup parent) {
            View selfieImage = convertView;
           ViewHolder holder = null;
         if(selfieImage == null) {
              LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
               selfieImage = inflater.inflate(R.layout.activity_main, parent, false);
                holder = new ViewHolder(selfieImage);
               int height = holder.selfieImage.getHeight();
               int width = holder.selfieImage.getWidth();
                selfieImage.setTag(holder);
          } 
   }

我基本上想做的是利用Android View持有者的模式。 如果convertView为null,则意味着它以前没有膨胀过(无法重用),因此我们应该采取一些步骤使其膨胀。 我将膨胀的视图传递到构造函数中,以便该视图能够找到其图像视图和文本视图。 我的问题是在将图像视图放大并连接到视图支架之后,为什么它的高度和宽度为0?(知道这一点是因为我逐步执行了代码)。 这些值是实际值很重要,因为我需要在http://developer.android.com/training/camera/photobasics.html的setPic方法中使用它们。

我研究了其他可能的问题。 https://stackoverflow.com/questions/20434257/gridview-setadapter-imageview-width-and-height-0这个人也有类似的问题,但从未得到答案。 为什么我的FrameLayout的高度为0? 可能不是我的问题,因为应该已经绘制了UI(在onCreate中没有调用过此方法),而且也没有因为没有在构造函数中要求高度和宽度而获取ImageView的宽度和高度 ImageView 的大小不是要放在GalleryView中的这个Inflated 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;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM