GridView的行为并不像它应该的那样。 此screenshot显示GridView(在横向模式下)向左刷新。 我希望它居中。
这是GridView的XML布局。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/templatelandscape"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<GridView
android:id="@+id/commandsbarlandscape"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:padding="0dp"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:numColumns="auto_fit"
android:columnWidth="52dp"
android:stretchMode="spacingWidth"
android:gravity="fill_horizontal" />
</LinearLayout>
我做错了什么?
答案 0 :(得分:3)
我不知道你是否解决了你的问题(我希望是的,而且我也很晚才回答这篇文章!),但这里有一个线索:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<GridView
android:id="@+id/gridview2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:stretchMode="spacingWidth" >
</GridView>
</LinearLayout>
不幸的是,只有在网格上有1个内容时才能正常工作。 也许有人可以改进它!
答案 1 :(得分:1)
android:layout_height="wrap_content"
对于自己滚动的小工具没有意义,例如GridView
。
android:layout_alignParentTop="true"
和android:layout_centerInParent="true"
适用于RelativeLayout
,而非LinearLayout
。
摆脱您的android:layout_weight="1.0"
,将android:layout_height
更改为"fill_parent"
或特定身高,将LinearLayout
更改为RelativeLayout
,您可能会更好的形状。
答案 2 :(得分:1)
使用以下属性
设置LinearLayout的值 android:gravity="center"
。
并从gridview中删除以下行
android:layout_centerInParent="true"
答案 3 :(得分:0)
尝试切换到RelativeLayout并从网格视图中删除水平填充。水平填充导致我的网格偏离中心。我在网格项布局周围添加了一个视图容器来创建填充。
答案 4 :(得分:0)
你的GridLayout应该是这样的..
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/templatelandscape"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<GridView
android:id="@+id/commandsbarlandscape"
android:background="@android:color/darker_gray"
android:layout_gravity="center_horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:numColumns="auto_fit"
android:columnWidth="52dp"
android:stretchMode="none"
android:gravity="fill_horizontal" />
我只是放置android:layout_gravity =&#34; center_horizontal&#34;在父布局中,所以它在其父级中心设置了gridlayout,但不是它在中心的内容。 还添加了android:layout_width =&#34; 0dp&#34;因为它等于&#34;&#34; warp_content&#34;属性如果你给&#34; 0dp&#34;它会告诉你更好的结果。 我还删除了你可以观察到的相对布局属性,如果你没有使用RelativeLayout,那么使用那些什么也不做的属性是毫无意义的。
出于测试目的,您可以检查它是否正常工作或不使用以下xml代码进行测试
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/templatelandscape"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<GridView
android:id="@+id/commandsbarlandscape"
android:background="@android:color/darker_gray"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:numColumns="auto_fit"
android:columnWidth="52dp"
android:stretchMode="none"
android:gravity="fill_horizontal" />
</LinearLayout>
上面的xml显示您的网格布局位于父级的中心,而不是它的内容。
希望这个解释对你有用......
答案 5 :(得分:0)
不是在LinearLayout中设置GridView,而是在 RelativeLayout 中设置它 在GridView中设置 layout_centerHorizontal = true 和 layout_centerVertical = true 。
答案 6 :(得分:0)
我发现的最佳解决方案是通过代码执行此操作。
这是我的xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dslv="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f1f1f1"
android:orientation="vertical">
<GridView
android:id="@+id/radio_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:divider="@null"
android:drawSelectorOnTop="true"
android:paddingBottom="@dimen/gridview_column_space"
android:paddingTop="@dimen/gridview_column_space"
android:columnWidth="@dimen/gridview_column_width"
android:numColumns="auto_fit"
android:verticalSpacing="@dimen/gridview_column_space"
android:horizontalSpacing="@dimen/gridview_column_space"
android:stretchMode="none"
android:scrollbars="none"
/>
<include layout="@layout/placeholder" />
这就是我的片段上的魔法代码:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mGridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Point point = Common.getScreenSize(getActivity());
int rowSpace = getResources().getDimensionPixelSize(R.dimen.gridview_column_space);
int rowWidth = getResources().getDimensionPixelSize(R.dimen.gridview_column_width) + rowSpace;
int minWith = (point.x / rowWidth) * rowWidth;
int padding = (point.x - minWith) / 2;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(minWith + padding * 2, ViewGroup.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
mGridView.setPadding(padding + rowSpace / 2, 0, padding, 0);
mGridView.setLayoutParams(params);
mGridView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}); }
}