[英]How does scaleType and wrap_content determine ImageView width and height?
[英]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.