首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:水平居中网格视图

Android:水平居中网格视图
EN

Stack Overflow用户
提问于 2011-05-27 00:27:51
回答 4查看 17.6K关注 0票数 9

我需要在我的android layout.xml中水平居中网格视图。我在谷歌上搜索了很长一段时间,但没有找到答案。

我只能通过更改strechMode来更改网格视图的水平位置,但这样我的项目就不会彼此靠近。我需要的是项目是一个靠近另一个(没有空格)和水平居中。我选择strechmode = none,所以现在我的项目彼此靠近,但它们在屏幕的左侧,我只希望它们水平居中。

下面是我的布局xml:

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent"
          android:background="@drawable/background" 
          android:gravity="center">

<GridView android:id="@+id/lw_gridview" 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:numColumns="3" 
          android:columnWidth="48dp"
          android:horizontalSpacing="0dp"
          android:verticalSpacing="0dp"
          android:stretchMode="none"
          />


</LinearLayout>

以下是图像适配器在gridview上设置的图像片段:

代码语言:javascript
复制
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(48,48)); //on medium density
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setPadding(0, 0, 0, 0);

我怎样才能成功呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-29 18:10:08

我通过计算和设置网格视图的填充,手动将其居中。下面是我的onCreate的功能:

找出屏幕的宽度和屏幕的宽度以及项目宽度和间距的常量值,从DIP到pixels

  • calculate
  • 我可以容纳的列数。

方程看起来像这样,numColumns是唯一的未知数:

numColumns * itemWidth + (numColumns - 1) * spacingBetweenItems + selectorPadding <= sreenWidth

  • numColumns,计算我的网格视图实际需要多少水平空间,
  • 具有网格视图的实际宽度,设置填充,使其最终位于

的中心

好的,下面是一些代码:

代码语言:javascript
复制
// Convert DIPs to pixels
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
mSizePx = (int) Math.floor(SIZE_DIP * metrics.scaledDensity);
mSpacingPx = (int) Math.floor(SPACING_DIP * metrics.scaledDensity);

GridView gridview = (GridView) findViewById(R.id.gridview);
// Find out the extra space gridview uses for selector on its sides.
Rect p = new Rect();
gridview.getSelector().getPadding(p);
int selectorPadding = p.left + p.right;

// Determine the number of columns we can fit, given screen width,
// thumbnail width, and spacing between thumbnails.
int numColumns = (int) Math.floor(1f * (metrics.widthPixels - selectorPadding + mSpacingPx)
        / (mSizePx + mSpacingPx));

int contentWidth = numColumns * mSizePx; // Width of items
contentWidth += (numColumns - 1) * mSpacingPx; // Plus spaces between items
contentWidth += selectorPadding; // Plus extra space for selector on sides

// Now calculate amount of left and right margin so the grid gets
// centered. This is what we
// unfortunately cannot do with layout_width="wrap_content"
// and layout_gravity="center_horizontal"
int slack = metrics.widthPixels - contentWidth;

gridview.setNumColumns(numColumns);
gridview.setPadding(slack / 2, slack / 2, slack / 2, slack / 2);
票数 16
EN

Stack Overflow用户

发布于 2012-02-02 01:03:32

在GridView布局或样式上将拉伸模式设置为columnWidth:

android:stretchMode="columnWidth“

列宽将拉伸以填充可用空间。您可以将网格项目包装在透明容器中,该容器将均匀拉伸,同时保留可见内容的宽度。android: column column属性的作用是“最小列宽”。这也适用于android:numColumns=auto_fit,android:horizontalSpacing和android:verticalSpacing。

根据您的网格项目,您可能不想在内容周围添加透明容器。如果你不这样做,内容宽度将均匀伸展,这在更多的设备上可能看起来更好。

票数 12
EN

Stack Overflow用户

发布于 2011-05-27 00:47:32

你有没有检查过你的GridView在LinearLayout中的位置是否正确?试着在GridView上使用android:layout_gravity="center"。此外,尝试使用android:gravity=和不同的位置,以获得更清晰的视图,了解重力如何作用于布局。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6141910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档