我已经看到了关于如何分别设置ImageView和GridView的高度和宽度的问题。首发Here,here和here
但是,我想知道如何设置两者。
这是我的设置。在我的GridView中,我有一个ImageView和一个TextView。我有一些不同宽度和大小的图像,我想调整大小始终是屏幕方块大小的1/3。在下面,我有一个文字说明。
这是我到目前为止的代码......
gallerygridview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/bg_light_blue"
android:orientation="vertical" >
<GridView
android:id="@+id/gridGallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:numColumns="3"
android:padding="0dp"
android:verticalSpacing="4dp" >
</GridView>
<ImageView
android:id="@+id/imgNoMedia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/app_name"
/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="bold"
android:typeface="sans"
android:layout_below="@+id/imageView1"
android:layout_marginTop="2dp"
android:layout_centerHorizontal="true"
android:textColorHighlight="#000000"
android:gravity="center"
/>
</LinearLayout>
在我的活动中......
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallerygridview);
GridView gridView = (GridView) findViewById(R.id.gridGallery);
m_adapter = new PhotoImageAdapter(getBaseContext(),m_images);
gridView.setAdapter(m_adapter); // uses the view to get the context instead of getActivity().
registerForContextMenu(gridView);
}
在我的Adapter类中......
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
Holder holder=new Holder();
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.gallerygridview, parent, false);
holder.img = new ImageView(mContext);
holder.img = (ImageView) view.findViewById(R.id.imgNoMedia);
holder.tv = (TextView) view.findViewById(R.id.textView1);
int iDisplayWidth = mContext.getResources().getDisplayMetrics().widthPixels ;
int iImageWidth = (iDisplayWidth / 3)-15 ;
GridView.LayoutParams glp = (GridView.LayoutParams) view.getLayoutParams();
glp.width = iImageWidth;
glp.height = iImageWidth ;
view.setLayoutParams(glp);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.tv.setText(m_images.get(position).key);
holder.img.setImageURI(Uri.parse(m_images.get(position).value));
return view;
}
目前,GridView的大小恰好是屏幕的1/3。并显示图像和文字。但我希望ImageView能够填充GridView单元格中的剩余空间。
这就是我想要的......
但这就是它的样子......
我做错了什么?而且,我如何以编程方式设置GridView的高度和其中的ImageView?
提前致谢。
答案 0 :(得分:4)
这是一种相对简单的方法。将GridView放入布局,设置拉伸模式以拉伸列宽,将间距设置为0(或任何您想要的),并将列数设置为2:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp"
android:stretchMode="columnWidth"
android:numColumns="2"
/>
</FrameLayout>
并参考this以了解有关GridView和ImageView的更多信息
答案 1 :(得分:1)
看到你的输出图像后,这就是我理解的问题和原因
缩放图像时,必须按照该图像的纵横比进行缩放。
例如:假设您的图片尺寸为900 1200 (w h)
将其宽度缩放到400
需要像这样做
newWidth = 400;
newHeight = 1200 * (400/900) = 533.33
如果您想要自动缩放imageview的图像,请在xml布局(fitCenter,centerInside
等)中检查ImageView的scaleType属性
在getView中添加此行
holder.img.setScaleType(ScaleType.CENTER_INSIDE);