安卓:中心gridview的水平 [英] Android: center gridview horizontally

查看:117
本文介绍了安卓:中心gridview的水平的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要在我的Andr​​oid layout.xml水平居中网格视图。我已搜查谷歌相当长的一段时间,但在找到答案didnt成功。

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 =没有,所以现在我的项目是靠近彼此,但他们是在屏幕的左侧,我只是希望他们水平居中。

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

我如何能成功吗?

How can i succeed?

推荐答案

我心我的网格手动认为,通过计算并设置其填充。下面是我的的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)* spacingBetweenItems + selectorPadding&LT; = 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

确定,这里的一些code:

OK, and here's some code:

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

这篇关于安卓:中心gridview的水平的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆