gpt4 book ai didi

java - 为什么我的膨胀后的 ImageView 的高度和宽度都是 0?

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:07 25 4
gpt4 key购买 nike

这是我的布局文件,我从中扩充了 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/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"
/>

这是我的基本适配器中的代码,它将将此布局文件膨胀为具有 View 持有者类(内部静态类)的 View 对象

    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 Viewholder 的模式。如果convertView为null,则意味着它之前没有被inflate(不能重用),所以我们应该采取步骤来inflate它。我将膨胀的 View 传递到构造函数中,以便 View 能够找到其 ImageView 和 TextView 。我的问题是,在 ImageView 膨胀并附加到 View 支架之后,为什么它的高度和宽度为 0?(知道这一点是因为我单步执行了代码)。重要的是这些值是实际值,因为我需要在 http://developer.android.com/training/camera/photobasics.html 的 setPic 方法中使用它们。 .

我查看了其他可能的线程来解决我的问题。人https://stackoverflow.com/questions/20434257/gridview-setadapter-imageview-width-and-height-0有类似的问题但从未得到答案。这个Why does my FrameLayout have 0 height?这不可能是我的问题,因为 UI 应该已经绘制了(没有在 onCreate 中调用它)不可能是这个Get ImageView width and height因为我没有在 ImageView 的构造函数中调用高度和宽度而不是这个Inflated ImageView to put in GalleryView isn't the right size因为我确保指定了一个父级。

有谁知道为什么高度和宽度返回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;
}

关于java - 为什么我的膨胀后的 ImageView 的高度和宽度都是 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com