【问题标题】:android How to stretch rows in the gridview to fill screen?android 如何在gridview中拉伸行以填充屏幕?
【发布时间】:2011-10-27 09:39:58
【问题描述】:

我有一个简单的 GridView(一列六行),它在单元格中显示带有 TextView 的 ImageView(我创建了适配器)。如何拉伸行以填充整个屏幕高度?现在我在单元格下方有一些空间......

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:orientation="horizontal">
<LinearLayout android:layout_height="fill_parent"
    android:layout_width="150dp" 
    android:orientation="vertical"
    android:id="@+id/left">
    <include layout="@layout/menu_grid"></include>
</LinearLayout>
<LinearLayout android:layout_height="fill_parent"
    android:layout_width="fill_parent" 
    android:orientation="vertical"
    android:id="@+id/right">
    <ImageView android:src="@drawable/image"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:id="@+id/imageMain" 
        android:layout_gravity="center">
    </ImageView>
</LinearLayout>

menu_grid.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<GridView android:layout_height="wrap_content"
    android:layout_width="fill_parent" 
    android:id="@+id/gridView"
    android:padding="10dp" 
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp" 
    android:numColumns="1"
    android:columnWidth="100dp" 
    android:stretchMode="columnWidth"
    android:gravity="center"></GridView>

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:gravity="fill_horizontal">
<ImageView android:src="@drawable/icon"
    android:layout_height="70dp" android:id="@+id/imageIcon"
    android:layout_width="70dp" android:layout_gravity="center_horizontal"></ImageView>
<TextView android:id="@+id/textIcon" android:text="TextView"
    android:layout_gravity="center" android:layout_height="wrap_content"
    android:layout_width="wrap_content"></TextView>

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
//....some code
//....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if (convertView == null) {  
        LayoutInflater inflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item, null);

        TextView text = (TextView) view.findViewById(R.id.textIcon);
        text.setText(labels[position]);

        ImageView image = (ImageView) view.findViewById(R.id.imageIcon);
        image.setImageResource(icons[position]);        

    } else {
        view = convertView;
    }

    return view;
}

}

【问题讨论】:

  • 发布您的布局和/或代码。

标签: android gridview screen


【解决方案1】:

据我了解,问题是 - 如果我有 6 行数据要填充到 gridView 中,我怎样才能让这 6 行填满整个屏幕,而不是在下面显示 6 行和一些空白空间最后一行。

要实现这一点,您必须将 gridView 项目布局的最小高度(在您的情况下为 item.xml)设置为(屏幕高度)/6,其中 6 是(您必须填充的行数)。这个最小高度可以在您使用的适配器中设置。

要查找设备屏幕的高度:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width = metrics.widthPixels;
int height = metrics.heightPixels;

在 Activity 中找到这些值并将它们设为公共静态并在适配器中使用它们,我在适配器类中查找这些值时遇到了问题

然后设置最小高度:

view = inflater.inflate(R.layout.item, null);
view.setMinimumHeight(GridViewActivity.height/6);

我在看到帖子后尝试了这个,效果很好。

【讨论】:

  • @androidmaniac 如何将我的 RecyclerView 2x2 填充到设备的屏幕上?
  • 你能帮我解决这个question吗?
  • 不幸的是,它对我不起作用。我正在尝试用Caldroid 日历的单元格填充全屏。
【解决方案2】:

如果你只是想增加行之间的空间你可以使用填充它应该工作。 您可以根据您的要求通过 xml 或以编程方式设置填充。

// this you can set inside your view.
android:paddingLeft="5px"
android:paddingRight="5px"
android:paddingTop="10px"
android:paddingBottom="10px"

// this you can set to your any widgets like TextView/Layouts/Buttons etc..
setPadding(top, left, bottom, right);

【讨论】:

    【解决方案3】:

    扩展一个布局,比如 Framelayout,然后覆盖 onMeasure 方法。

    public class CameraView extends FrameLayout 
    
    public TextView titleView;
    
    public CameraView(Context context,AttributeSet attrs) {
        super(context, attrs)
        titleView = rootView.findViewById(R.id.titleView);
    }
    
    
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
    }
    

    然后您可以在 BaseAdapter 中使用此视图并将 layout_widthlayout_height 设置为 match_parent

    【讨论】:

      【解决方案4】:

      我希望我能正确理解您,如果是这样,只需将您的 GridView 更改为 fill_parent insteadwrap_content

      改变

      <GridView android:layout_height="wrap_content"
      

      <GridView android:layout_height="fill_parent"
      

      如果不是这种情况,则可能是您要修改的 item.xml 的 LinearLayout 上的布局高度。

      【讨论】:

      • 谢谢,但它不起作用:(我只是想增加行之间的空间以填充屏幕(拉伸行,而不是列)。我会尝试布局高度:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      相关资源
      最近更新 更多