GridLayout无法正常显示,与预览不匹配

时间:2016-10-08 00:37:05

标签: android-layout preview

这个问题已经被提出但没有回答,所以我将添加另一个实例。原来就在这里,这正是我的问题。这是XML:

<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.slidamusic.gridlayoutdemo.GridDemo">

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
   >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button"

        android:layout_row="0"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button1"

        android:layout_row="0"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button2"

        android:layout_row="1"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button3"

        android:layout_row="1"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="1" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button4"

        android:layout_row="2"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button5"

        android:layout_row="2"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button6"

        android:layout_row="3"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:text="New Button"
        android:id="@+id/button7"

        android:layout_row="3"

        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_column="1" />



</GridLayout>

这是8个按钮的非常简单的布局,在预览中都完美对齐,大小相同,分为2列和4行。当我在平板电脑上运行程序时,事情会更加混乱,或多或少是这样的:

GridLayout does not expand elements evenly

我假设问题可能在于android:layout_gravity =“fill”,因为当我删除此行时按钮的大小正常并且它们排列得很好,但是它们并没有像我希望的那样填满屏幕,并在预览中显示。

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。这与缺乏与旧API的兼容性。

layout_rowWeight和layout_columnWeight仅适用于API 21及更高版本。我的设备使用API​​ 17.可能有这个问题的解决方案,但最好的想法是使用其他类型的格式来实现相同的视觉效果,例如硬编码按钮的大小。

我正在参加一个在线课程并完全遵循程序的构建,因此我特别感兴趣的是为什么这不起作用。我将Android Studio上的预览设置为API 23.将其设置为我的测试设备的相应API,可以准确地向我展示程序的外观。如果有人看到这个并且知道如何在较低的API中使用这些属性,我会有兴趣学习如何做到这一点。

Android Studio本身有关于使用这些属性的警告,我终于注意到了。可以节省大量的时间!