当前位置: 首页 > 知识库问答 >
问题:

使用3行充满整个屏幕的ImageView创建gridview

梁嘉祥
2023-03-14

我一直在到处寻找类似的解决方案,但似乎没有一个对我有用。

在我的第一个屏幕上,我将有一个由1列和3行垂直组成的gridview。每一行在文本视图的顶部都有一个imageview和一个部分透明的textview。图像视图可以很好地跨越屏幕宽度。我唯一的问题是,这3个图像视图没有垂直跨越整个屏幕,行之间有空间,尽管我尝试了许多方法来解决这个问题。我将发布我的xml文件和代码:

row_layout.xml-这是网格视图项目

<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>

主要的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;

}

}

主要活动:

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);
        }

    });
}

}

任何帮助将不胜感激,我花了几个小时试图解决这个问题!

共有1个答案

佘京
2023-03-14

了解屏幕高度后,动态设置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();
}
 类似资料:
  • 问题内容: 我在网页上使用径向渐变作为背景,如下所示: 它可以工作,但是当内容不能填满整个页面时,渐变会被切断。如何使元素始终填充整个页面? 问题答案:

  • 问题内容: 给定此代码: 导致这种交互: 即使标签/文本组件不需要整个宽度,如何填充屏幕的宽度? 我发现的一个窍门是在结构中插入一个 空 ,如下所示: 产生所需的设计: 有没有更好的办法? 问题答案: 尝试将.frame修饰符与以下选项一起使用: 这被描述为是一个灵活的框架(请参阅文档),它将伸展以填充整个屏幕,并且当它有多余的空间时,它将使其内容居中。

  • 我正在尝试构建一个JavaFX应用程序,其中我有一个名为“Start”的按钮和一个ImageView。使用JavaFX-12的机器人类,我正在尝试在单击按钮时截取笔记本电脑屏幕的屏幕截图,并在ImageView中的运行时逐一显示图像。我的问题是JavaFX窗口没有响应,程序崩溃(可能)。甚至让线程进入睡眠状态似乎也不起作用。我假设它不起作用,因为我没有设置任何fps规则,但我怎么能这样做呢?目前,

  • 本文向大家介绍Visual Basic .NET创建一个充满值的字典,包括了Visual Basic .NET创建一个充满值的字典的使用技巧和注意事项,需要的朋友参考一下 示例 这将创建一个字典,并立即用三个KeyValuePairs填充它。 您还可以稍后使用Add方法添加新值: 请注意,键(第一个参数)在字典中必须唯一,否则将引发Exception。

  • 我正在尝试以编程方式添加ImageView,但不要在不同的屏幕上制作相同的大小。我尝试了许多比例代码,但没有任何好的结果。 屏幕:屏幕图像 这是我的代码:

  • 在持续按住PS键后显示的画面,可调整屏幕的亮度。 拖拽滑杆的旋钮,移动至想设定的亮度后再放开手指。