你的 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="center_horizontal" 放在父布局中,因此它将 gridlayout 设置在它的父中心,而不是它的中心内容。还添加了 android:layout_width="0dp" 因为它等于 ""warp_content" 属性,如果你给 "0dp" 它会显示更好的结果。我还删除了你添加的相对布局属性,你可以观察到,如果你不使用 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 向您展示了您的网格布局位于父级的中心,但不是它的内容。
希望这个解释对你有用......