android gridlayout 未在模拟器 API 22 中显示

标签 android android-emulator android-relativelayout android-gridlayout android-api-levels

我有一个应用程序在运行 API 23 的实际设备 Nexus 6P 和运行 API 24 的模拟 6P、5 和 4 上完全按照预期运行,但在模拟 Nexus 上显示奇怪的 GridLayout 行为5 和 4 运行 API 22。

该应用只有一个 Activity ,其中包含多个 RelativeLayout,这些 Activity 以编程方式设置为 .VISIBLE.INVISIBLE。在一个这样的 RelativeLayout 中,我有 2 个 GridLayout,如下所示。模拟 API 22 时,底部的 GridLayout 不显示,但无论 API 22、23 还是 24,顶部的总是显示。底部的 GridLayout 仅在我更改模拟器时显示设置为 API 24(没试过 23)。为什么会这样?我不认为我在 GridLayout 上使用任何需要 API 23 或更高版本的东西。这个问题意味着我无法在运行 API 22 或 21 的 Nexus 5 上安装此应用程序。感谢您的任何建议。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/gameOperations"
    android:visibility="invisible">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/launchDisplay"
        android:gravity="center_horizontal">

        <TextView
            android:text="@string/app_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/launchTitle"
            android:textStyle="normal|bold"
            android:textSize="50dp"
            android:textAlignment="center"
            android:fontFamily="casual"
            android:textColor="@android:color/holo_blue_dark"
            android:layout_marginTop="15dp"
            android:layout_weight="1" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/brain_orig_crop_500"
            android:id="@+id/launchImage"
            android:scaleType="centerInside"
            android:layout_weight="2" />

        <TextView
            android:text="@string/launchSubtitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/launchSubtitle"
            android:fontFamily="casual"
            android:textAlignment="center"
            android:textColor="@android:color/holo_blue_dark"
            android:textSize="25dp"
            android:textStyle="normal|bold"
            android:layout_weight="1"
            android:layout_marginTop="15dp" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/launchControls"
            android:gravity="center_vertical"
            android:layout_weight="1">

            <Button
                android:text="@string/debug"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/launchSpacerLeft"
                android:layout_weight="1"
                android:background="@color/colourTransparent"
                android:textSize="15dp"
                android:fontFamily="casual"
                android:textAllCaps="false"
                android:visibility="invisible" />

            <Button
                android:text="@string/launchStart"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/launchStart"
                android:textColor="@android:color/holo_green_dark"
                android:textSize="38dp"
                android:textStyle="normal|bold"
                android:onClick="prepareNewGame"
                android:layout_weight="3"
                android:background="@color/colourTransparent"
                android:fontFamily="casual"
                android:textAllCaps="false" />

            <Button
                android:text="@string/layoutNormal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/launchSpacerRight"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:background="@color/colourTransparent"
                android:fontFamily="casual"
                android:textSize="15dp" />

        </LinearLayout>

    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:id="@+id/header"
        android:columnCount="6"
        android:rowCount="4"
        android:layout_height="168dp"
        android:useDefaultMargins="true"
        android:layout_alignParentTop="true">

        <ImageView
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:srcCompat="@drawable/brain_orig_500"
            android:id="@+id/imageBrain"
            android:layout_column="0"
            android:layout_row="0"
            android:layout_rowWeight="1"
            android:layout_rowSpan="4"
            android:layout_columnSpan="6"
            android:layout_columnWeight="1"
            android:layout_gravity="fill"
            android:scaleType="fitCenter" />

        <Button
            android:text="@string/debug"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/debug"
            android:layout_column="2"
            android:layout_row="3"
            android:layout_columnSpan="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:fontFamily="casual"
            android:textSize="18dp"
            android:textStyle="normal|bold"
            android:textAllCaps="false"
            android:onClick="prepareNewGame"
            android:background="@color/colourTransparent"
            android:layout_gravity="fill"
            android:paddingTop="10dp"
            android:visibility="gone" />

        <TextView
            android:text="@string/blank"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/spacerColumn"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_columnSpan="2"
            android:layout_gravity="fill"
            android:layout_row="0"
            android:layout_rowSpan="3"
            android:layout_rowWeight="3" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:text="@string/timerDisplay"
            android:id="@+id/timerDisplay"
            android:layout_column="0"
            android:layout_row="3"
            android:layout_columnSpan="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:fontFamily="casual"
            android:textSize="30dp"
            android:textStyle="normal|bold"
            android:gravity="start"
            android:layout_gravity="fill"
            android:layout_rowSpan="1" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/rightWrongDisplay"
            android:layout_column="2"
            android:layout_row="3"
            android:layout_columnSpan="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:textAlignment="center"
            android:textStyle="normal|bold"
            android:textSize="28dp"
            android:fontFamily="casual"
            android:layout_gravity="fill"
            android:layout_rowSpan="1"
            android:visibility="gone" />

        <TextView
            android:text="@string/scoreDisplay"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/scoreDisplay"
            android:layout_column="4"
            android:layout_row="3"
            android:layout_columnSpan="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:fontFamily="casual"
            android:textStyle="normal|bold"
            android:textSize="30dp"
            android:gravity="end"
            android:layout_gravity="fill"
            android:layout_rowSpan="1" />

    </GridLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/scoreBoard"
        android:layout_alignParentTop="false"
        android:layout_below="@+id/header"
        android:visibility="gone">

    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/question"
        android:layout_below="@+id/scoreBoard"
        android:layout_marginTop="15dp"
        android:gravity="center">

        <TextView
            android:text="@string/operandLeft"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/operandLeft"
            android:layout_weight="5"
            android:textSize="60sp"
            android:fontFamily="casual"
            android:textAlignment="textEnd"
            android:textStyle="normal|bold"
            android:paddingEnd="10dp"
            android:paddingStart="0dp"
            android:layout_gravity="center_vertical|end"
            android:paddingLeft="0dp"
            android:paddingRight="10dp"
            android:visibility="gone" />

        <TextView
            android:text="@string/operator"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/operator"
            android:layout_weight="1"
            android:textAlignment="center"
            android:textStyle="normal|bold"
            android:textSize="60sp"
            android:fontFamily="casual"
            android:visibility="gone" />

        <TextView
            android:text="@string/operandRight"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/operandRight"
            android:layout_weight="5"
            android:textAlignment="textStart"
            android:textStyle="normal|bold"
            android:textSize="60sp"
            android:fontFamily="casual"
            android:paddingStart="10dp"
            android:paddingEnd="0dp"
            android:layout_gravity="center_vertical|start"
            android:paddingLeft="10dp"
            android:paddingRight="0dp"
            android:visibility="gone" />

        <TextView
            android:text="@string/sampleQuestion"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/questionView"
            android:layout_weight="1"
            android:gravity="center"
            android:textSize="60dp"
            android:textStyle="normal|bold"
            android:fontFamily="casual" />

    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_below="@+id/question"
        android:layout_marginTop="10dp"
        android:id="@+id/answers"
        android:rowCount="2"
        android:columnCount="2"
        android:useDefaultMargins="true"
        android:layout_above="@+id/footer">

        <Button
            android:text="@string/answer0"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/answer0"
            android:layout_column="0"
            android:layout_row="0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:onClick="actionAnswer"
            android:textSize="50dp"
            android:textAllCaps="false"
            android:textStyle="normal|bold"
            android:fontFamily="casual"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colourTransparent" />

        <Button
            android:text="@string/answer1"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/answer1"
            android:layout_column="1"
            android:layout_row="0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:onClick="actionAnswer"
            android:textSize="50dp"
            android:textAllCaps="false"
            android:textStyle="normal|bold"
            android:fontFamily="casual"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colourTransparent" />

        <Button
            android:text="@string/answer2"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/answer2"
            android:layout_column="0"
            android:layout_row="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:onClick="actionAnswer"
            android:textSize="50dp"
            android:textAllCaps="false"
            android:textStyle="normal|bold"
            android:fontFamily="casual"
            android:background="@color/colourTransparent" />

        <Button
            android:text="@string/answer3"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/answer3"
            android:layout_column="1"
            android:layout_row="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_gravity="fill_horizontal"
            android:onClick="actionAnswer"
            android:textSize="50dp"
            android:textAllCaps="false"
            android:textStyle="normal|bold"
            android:fontFamily="casual"
            android:background="@color/colourTransparent"  />

    </GridLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:id="@+id/footer"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:visibility="gone"
        android:layout_alignParentBottom="true">

        <TextView
            android:text="@string/footerText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/footerText"
            android:layout_weight="1"
            android:gravity="center"
            android:textSize="18sp"
            android:fontFamily="casual" />

    </LinearLayout>
</RelativeLayout>

最佳答案

我也遇到了这个问题,我终于通过使用 android.support.v7.widget.GridLayout 而不仅仅是 GridLayout 找到了解决方案

我不太了解细节,但以前版本的 GridLayout 似乎不支持 android:layout_columnWeight 属性,尽管它确实支持 android:layout_width属性(property)。鉴于您使用“layout_width”(确实存在)将宽度设置为“0dp”,然后尝试使用“columnWeight”(不存在)“拉伸(stretch)”它,小部件保持为 0dp,因此不会显示。

要解决此问题,GridLayout 的“support.v7”版本允许您使用“layout_columnWeight”,但您必须确保在它前面加上“app”作为前缀,与“android”相对应,如 app :layout_columnWeight = "1"。所以你的布局文件应该是:

<android.support.v7.widget.GridLayout
        android:layout_width="match_parent"
        android:id="@+id/header"
        android:columnCount="6"
        android:rowCount="4"
        android:layout_height="168dp"
        android:useDefaultMargins="true"
        android:layout_alignParentTop="true">

    <ImageView
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:srcCompat="@drawable/brain_orig_500"
            android:id="@+id/imageBrain"
            android:layout_column="0"
            android:layout_row="0"
            android:layout_rowWeight="1"
            android:layout_rowSpan="4"
            android:layout_columnSpan="6"
            app:layout_columnWeight="1"
            android:layout_gravity="fill"
            android:scaleType="fitCenter" />

    .
    . 
    .

</android.support.v7.widget.GridLayout>

关键的变化是将 android.support.v7.widget. 添加到 Gridlayout 并将 android:layout_columnWeight="1" 更改为 app:layout_columnWeight="1"

您还必须将要使用的 gridlauout-v7 版本添加到 list 的依赖项部分。对我来说,我补充说:

编译 'com.android.support:gridlayout-v7:26.0.0-alpha1'

最后,如果您想在样式中包含列权重,则省略“app”前缀,如:

<style name="button_digit" parent="button">
    <item name="android:layout_width">0dip</item>
    <item name="layout_columnWeight">1</item>
    .
    .
    .

</style>

关于android gridlayout 未在模拟器 API 22 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275338/

相关文章:

android - 从适配器启动 Activity 不适用于 SwipeListView 库

android - 如何在从 json 解析的 ListView 上使用 onItemclick

android - Wifi 扫描结果未广播

java - android 开发新手 : Android Emulator always has apps crash

android - 为相对布局android创建和设置边距编程

android - 单击外部时如何隐藏布局

android - 在 ViewSwitcher 中对 View 使用相对定位

android - 操作栏选项卡指示器幻灯片

java - LiveData观察者的onchanged()方法执行多次

android - 简单的 Android 加减法应用程序