这是我的布局文件,我从图像视图中充气。
<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人有类似的问题,但从未得到答案。 这个Why does my FrameLayout have 0 height?无法成为我的问题,因为用户界面应该已经绘制好了(没有在onCreate中调用它) 并且它不可能是Get ImageView width and height,因为我没有在ImageView的构造函数中调用高度和宽度 而不是这个Inflated ImageView to put in GalleryView isn't the right size,因为我确保指定父母。
有谁知道为什么身高和宽度都会返回0?我可以在我的xml文件中硬编码高度和宽度,但我认为这是糟糕的风格。
答案 0 :(得分:0)
好吧,我现在有一台电脑为你测试。这就是我的尝试:我的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;
}