Android 使用3行图像视图创建gridview,这些图像视图填充整个屏幕
我一直在到处寻找类似的解决方案,但似乎没有一个适合我 在我的第一个屏幕上,我将有一个由1列和3行垂直组成的gridview。每一行将有一个imageview和文本视图顶部的一个部分透明的textview。图像视图跨越屏幕宽度。我唯一的问题是,3个图像视图并没有垂直跨越整个屏幕,行之间有空间,尽管我已经尝试了许多方法来解决这个问题。我将发布我的xml文件和代码: row_layout.xml-这是gridview项Android 使用3行图像视图创建gridview,这些图像视图填充整个屏幕,android,gridview,adapter,fullscreen,Android,Gridview,Adapter,Fullscreen,我一直在到处寻找类似的解决方案,但似乎没有一个适合我 在我的第一个屏幕上,我将有一个由1列和3行垂直组成的gridview。每一行将有一个imageview和文本视图顶部的一个部分透明的textview。图像视图跨越屏幕宽度。我唯一的问题是,3个图像视图并没有垂直跨越整个屏幕,行之间有空间,尽管我已经尝试了许多方法来解决这个问题。我将发布我的xml文件和代码: row_layout.xml-这是gridview项 <RelativeLayout xmlns:android="http://
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/item_image"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:layout_width="fill_parent"
android:layout_height="180dp"
android:src="@drawable/season1">
</ImageView>
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/item_image"
android:layout_alignTop="@+id/item_image"
android:layout_alignRight="@+id/item_image"
android:layout_alignBottom="@+id/item_image"
android:gravity="bottom|left"
android:textSize="30sp"
android:textAlignment="center"
android:lines="1"
android:layout_marginTop="145dp"
android:background="#99000000">
</TextView>
main.xml
<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="fill_parent"
tools:context=".MainActivity" >
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:padding="0dp"
android:gravity="center"
android:numColumns="1"
android:fitsSystemWindows="true"
android:stretchMode="columnWidth" >
</GridView>
我的自定义适配器:
public class CustomGridViewAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public CustomGridViewAdapter(Context context, int layoutResourceId, ArrayList<Item> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
RecordHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
row.setMinimumHeight(MainActivity.height1/3);
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
Item item = data.get(position);
holder.txtTitle.setText(item.getTitle());
holder.imageItem.setImageBitmap(item.getImage());// my image
return row;
}
static class RecordHolder {
TextView txtTitle;
ImageView imageItem;
}
公共类CustomGridViewAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
ArrayList数据=新的ArrayList();
公共CustomGridViewAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
记录持有者=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
行设置最小高度(主活动高度1/3);
holder=新记录持有者();
holder.txtTitle=(TextView)row.findViewById(R.id.item_text);
holder.imageItem=(ImageView)row.findViewById(R.id.item\u image);
row.setTag(支架);
}否则{
holder=(RecordHolder)row.getTag();
}
Item=data.get(位置);
holder.txtitle.setText(item.getTitle());
holder.imageItem.setImageBitmap(item.getImage());//我的图像
返回行;
}
静态类记录保持器{
TextView-txtTitle;
图像查看图像项;
}
}
主要活动:
public class MainActivity extends ActionBarActivity {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
public static int height1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
ActionBar ab = getActionBar();
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayShowHomeEnabled(false);
Resources res = this.getResources();
Bitmap bMap = BitmapFactory.decodeResource(res, R.drawable.actionbar);
BitmapDrawable actionBarBackground = new BitmapDrawable(res, bMap);
ab.setBackgroundDrawable(actionBarBackground);
//set grid view item
Bitmap season1Icon = BitmapFactory.decodeResource(res, R.drawable.season1);
Bitmap season2Icon = BitmapFactory.decodeResource(res, R.drawable.season2);
Bitmap season3Icon = BitmapFactory.decodeResource(res, R.drawable.season3);
gridArray.add(new Item(season1Icon,"Season 1"));
gridArray.add(new Item(season2Icon,"Season 2"));
gridArray.add(new Item(season3Icon,"Season 3"));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
height1 = metrics.heightPixels;
gridView = (GridView) findViewById(R.id.gridView1);
customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Intent a = new Intent(MainActivity.this, House.class);
a.putExtra("Position", position);
startActivity(a);
}
});
}
公共类MainActivity扩展了ActionBarActivity{
GridView;
ArrayList gridArray=新的ArrayList();
CustomGridViewAdapter customGridAdapter;
公共静态内部高度1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.main);
ActionBar ab=getActionBar();
ab.setDisplayShowTitleEnabled(假);
ab.setDisplayShowHomeEnabled(假);
Resources res=this.getResources();
位图bMap=BitmapFactory.decodeResource(res,R.drawable.actionbar);
BitmapDrawable actionBarBackground=新的BitmapDrawable(res,bMap);
ab.后退地面可牵引(行动地面);
//设置网格视图项
位图season1Icon=BitmapFactory.decodeResource(res,R.drawable.season1);
位图season2Icon=BitmapFactory.decodeResource(res,R.drawable.season2);
位图季节3图标=位图工厂.decodeResource(res,R.drawable.季节3);
gridArray.add(新项目(第1季Con,“第1季”);
gridArray.add(新项目(第二季Con,“第二季”);
添加(新项目(第三季图标,“第三季”);
DisplayMetrics=新的DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(度量);
height1=metrics.heightPixels;
gridView=(gridView)findViewById(R.id.gridView1);
customGridAdapter=新的CustomGridViewAdapter(this,R.layout.row\u grid,gridArray);
setAdapter(customGridAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
意向a=新意向(MainActivity.this,House.class);
a、 putExtra(“位置”,位置);
星触觉(a);
}
});
}
}
任何帮助都将不胜感激,我已经花了数小时试图解决这个问题 了解屏幕高度后,动态设置imageview的布局参数
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
//row.setMinimumHeight(MainActivity.height1/3); //don't need this, since wrap content will make the row height match your image view's
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
holder.imageItem.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, MainActivity.height1/3);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}