我一直在努力尝试,没有这样的运气。我在这里的所有其他答案都很幸运,也与居中GridView
有关,也没有运气。这是我的GridView
xml:
<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也会失败。我已经尝试了所有其他值,它仍然没有改变。它被困在左边。我也觉得奇怪的是,尝试从40以下的任何东西改变android:columnWidth
的大小它也没有做任何事情。当我增加40到45时,它也没有任何变化。但是将它改为50会使右边的空间消失。但是当把它放在我的手机上时,间距就在那里!我在2周前跳过这个继续研究其他的东西,但看起来我还没有解决这个问题,甚至理解为什么我没有尝试过。
如果有人帮我帮助我,我也可以提供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
,其中包含:{/ p>
<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,它在我的屏幕尺寸和任何其他更小的屏幕上看起来都很完美。一旦我去平板电脑,我怀疑我需要增加更多,但重点是,这是奇怪的行为。有没有人遇到过这个?
答案 0 :(得分:9)
您可能希望将GridView
置于RelativeLayout
内,然后将GridView
的{{1}}媒体资源设为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>
可让您更好地控制孩子的位置。
答案 1 :(得分:4)
这是我的工作配置:
<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"
/>
答案 2 :(得分:3)
您需要设置TextView的父布局的Gravity或TextView的LayoutGravity,Plz更改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>
答案 3 :(得分: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);
答案 4 :(得分: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);
答案 5 :(得分: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">
对我来说很好。