gpt4 book ai didi

Android:水平居中gridview

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:50 28 4
gpt4 key购买 nike

我需要在我的 android layout.xml 中水平居中 GridView 。我已经在谷歌上搜索了很长一段时间,但没有成功找到答案。

我只能通过更改 strechMode 来更改 gridview 的水平位置,但是我的项目并没有彼此靠近。我需要的是项目一个接一个(没有空格)并且水平居中。我选择 strechmode = none,所以现在我的项目彼此靠近,但它们位于屏幕左侧,我只希望它们水平居中。

这是我的布局 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 上设置的图像 fragment :

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

我怎样才能成功?

最佳答案

我通过计算和设置填充来手动将 GridView 居中。这是我的 onCreate做:

  • 找出屏幕宽度和屏幕密度
  • 将项目宽度和间距的常量值从 DIP 转换为像素
  • 计算我可以容纳的列数。

等式看起来像这样,numColumns是唯一未知的:

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

  • 拥有numColumns , 计算我的 GridView 实际需要多少水平空间
  • 具有 GridView 的实际宽度,设置填充,使其最终位于屏幕中央

好的,下面是一些代码:

// 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141910/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com