Android:水平居中 gridview [英] Android: center gridview horizontally
问题描述
我需要在我的 android layout.xml 中水平居中网格视图.我已经在谷歌上搜索了一段时间,但没有成功找到答案.
I need to center grid view horizontally in my android layout.xml. I have searched google for quite a while but didnt succeed in finding an answer.
我只能通过更改 strechMode 来更改 gridview 的水平位置,但是我的项目彼此并不靠近.我需要的是项目彼此靠近(没有空格)并水平居中.我选择 strechmode = none,所以现在我的项目彼此靠近,但它们位于屏幕左侧,我只希望它们水平居中.
I can only change gridview horizontal position by changing strechMode, but then my items are not near one another. that i need is items be one near another (without spaces) and centered horizontally. I choose strechmode = none, so now my items are near one another, but they are on the left of the screen, i just want them to be centered horizontally.
这是我的布局 xml:
Here is my layout xml:
<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 上设置的图像片段:
Here is fragment of an image which is set on gridview by image adapter:
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);
我怎样才能成功?
推荐答案
我通过计算和设置其填充手动将网格视图居中.这是我的 onCreate
所做的:
I centered my grid view manually, by calculating and setting its padding. Here's what my onCreate
does:
- 找出屏幕的宽度和屏幕密度
- 将项目宽度和间距的常量值从 DIP 转换为像素
- 计算我可以容纳的列数.
方程看起来像这样,numColumns
是唯一未知的:
Equation looks like this, numColumns
is the only unknown:
numColumns * itemWidth + (numColumns - 1) * spatialBetweenItems + selectorPadding <= sreenWidth
- 有
numColumns
,计算我的网格视图实际需要多少水平空间 - 具有网格视图的实际宽度,设置填充以使其位于屏幕中央
- having
numColumns
, calculate how much horizontal space my grid view will actually need - having actual width of grid view, set padding so that it ends up in the center of screen
好的,这是一些代码:
// 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);
这篇关于Android:水平居中 gridview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!