10

我一直在尝试和尝试,但没有这样的运气。我在这里的所有其他答案以及与居中相关的所有其他答案都很GridView幸运,也没有运气。这是我的GridViewxml:

<GridView
        android:id="@+id/calendar_grid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="7"
        android:columnWidth="40dp"
        android:verticalSpacing="1dp"
        android:horizontalSpacing="1dp"
        android:paddingTop="2dp"
        android:stretchMode="columnWidth"
        android:layout_gravity="right"
        android:gravity="right"
        android:background="#696969" ></GridView>

我已经尝试了所有我能想到的组合,但效果并不明显。至少它在设备之间不一致。这是它一直在做的事情的形象。

在此处输入图像描述

正如您在 GridView 的右侧看到的那样,有间距。我试图不断改变这一点,但它几乎永远不会奏效。使用android:stretchMode确实会改变它,但它会弄乱我在单元格之间的间距,所以这不起作用。如您所见,使用 Gravity 也会失败。我已经为它尝试了所有其他值,但它仍然没有改变。它粘在左边。我也觉得很奇怪,试图android:columnWidth从 40 岁以下的任何东西改变大小它也没有任何作用。当我将 40 增加到 45 时,它也没有任何变化。但是将其更改为 50 会使右侧的空间消失。但是当它放在我的手机上时,间距就在那里!两周前我跳过了这个,继续做其他事情,但看起来我还没有解决这个问题,甚至不明白为什么我没有尝试任何工作。

如果它可以帮助任何人在这里帮助我,我还可以提供构成单元格的 xml。但我不确定这是否重要。但这里是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/day_num"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="10dp"
        android:background="#000000"
        android:height="35dp"
        android:gravity="center_vertical|center_horizontal" />


</LinearLayout>

如果它有帮助,则GridView' 的父母是LinearLayout这样的:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_weight="0"
    android:gravity="center" >

还有一个权重为 1 的兄弟姐妹,但我认为这不应该是因为权重 0 使该部分首先设置其空间。

编辑

所以我一直在玩它,非常恼火,特别是因为似乎没有多少人有这个问题,但看起来不管我做多小columnWidth,GridView 几乎没有变小。事实上,在我达到 50dp 之前,你看到的同样的差距就是它。但是当我进入纵向模式时,间隙再次出现,所以我将它提高到 90dp(我尝试过,没有改变任何东西),它就消失了。奇怪的是GridView除了填补空白之外没有改变。所以我可以把它设为 200dp,它在我的屏幕尺寸和任何其他较小的屏幕上看起来都很完美。一旦我使用平板电脑,我怀疑我需要增加更多,但关键是,这是一种奇怪的行为。有没有人遇到过这个?

4

6 回答 6

9

您可能希望将您的GridView内部 aRelativeLayout然后将GridView'layout_centerInParent属性设置为true. 像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <GridView
            android:id="@+id/calendar_grid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:numColumns="7"
            android:columnWidth="40dp"
            android:verticalSpacing="1dp"
            android:horizontalSpacing="1dp"
            android:paddingTop="2dp"
            android:stretchMode="columnWidth"
            android:background="#696969"
            android:layout_centerInParent="true" />

</RelativeLayout>

RelativeLayout让您更好地控制孩子的位置。

于 2012-07-19T07:34:29.523 回答
7

这是我的工作配置:

        <GridView
        android:id="@+id/gridView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:cacheColorHint="@color/white"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:padding="5dp"
        android:scrollbars="none"
        android:stretchMode="columnWidth"
        android:gravity="center"
        />
于 2013-03-06T11:23:21.767 回答
3

您需要设置 TextView 的 Parent Layout 的 Gravity 或 TextView 的 LayoutGravity,请更改 Cell Layout 如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:gravity="center_vertical|center_horizontal" >
    <TextView 
        android:id="@+id/day_num"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="10dp"
        android:background="#000000"
        android:height="35dp"
        />


</LinearLayout>
于 2012-07-19T04:41:22.277 回答
1

我遇到了同样的问题,并且使用 centerInParent 的 RelativeLayout 也没有帮助。

基本上,划分可能包含将根据屏幕宽度截断的剩余部分。

因此,使 GridView 居中的唯一方法是计算一个不带余数的宽度,并使用余数作为填充。

WindowManager manager = window.getWindowManager();
int  screenWidth      = manager.getDefaultDisplay().getWidth();
int contentWidth      = screenWidth;

while( 0 != contentWidth%COLUMN_NUMBER ) contentWidth--;

columnWidth = contentWidth / COLUMN_NUMBER;
int padding = screenWidth - contentWidth;

然后,当您创建 GridView 时:

gridView.setColumnWidth(columnWidth);
gridView.setPadding(padding / 2, 0, padding / 2, 0);
于 2013-01-10T02:38:20.927 回答
0
There is more specific method to do this. You can define custom layout. And add TextView as the element. Then apply the properties what you want. To center make gravity = center like wise. Then apply that layout as the layout for your grid view.

Ex :
Sample layout name : myCellitemlayout.xml
<TextView>
      android:id="@+id/text_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center"
</TextView>

Now add this to your gridView adapter.
Ex: GridView

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                R.id.myCellitemlayout, numbers);

gridView.setAdapter(adapter);
于 2017-06-05T10:48:11.283 回答
0

centerInParent 也不适合我。

将 GridView 的 layout_height 属性更改为 wrap_content,如下所示:

<GridView
    android:id="@+id/calendar_grid"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="7"
    android:columnWidth="40dp"
    android:verticalSpacing="1dp"
    android:horizontalSpacing="1dp"
    android:paddingTop="2dp"
    android:stretchMode="columnWidth"
    android:layout_gravity="right"
    android:gravity="right"
    android:background="#696969" ></GridView>

如果您使用的是 RelativeLayout 或 LinearLayout 并不重要,但您必须像这样指定重力属性居中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">

它对我很有用。

于 2019-10-18T16:03:52.403 回答