【问题标题】:Android App Layout collapses on physical deviceAndroid App Layout 在物理设备上崩溃
【发布时间】:2018-03-18 15:04:06
【问题描述】:

Android Studio 中的布局和元素看起来正是我想要的样子,但是一旦我在我的设备上安装了 APK,布局就会崩溃。所有视图都在另一个之上折叠,这不是 Android Studio 预览中显示的内容...

我正在使用线性布局和相对布局。我在 1-2 年前使用过 android studio,没有约束布局之类的东西,现在每次创建布局时都会遇到约束错误。

XML 主要活动(只有一个):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"      tools:context="com.simultaneousequations.spacelaunchx.spacelaunchx.MainActivity">

    <LinearLayout
        android:id="@+id/linearLayoutTop"
        android:layout_width="0dp"
        android:layout_height="101dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="11dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toTopOf="@+id/linearLayoutCenter"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <RelativeLayout
            android:id="@+id/relativeLayoutTop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorLightGrey">

            <LinearLayout
                android:id="@+id/linearLayoutTopImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/iridumNEXT40_50"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:adjustViewBounds="false"
                    android:cropToPadding="false"
                    android:scaleType="fitStart"
                    app:srcCompat="@mipmap/iridiummission5" />
            </LinearLayout>

            <TextView
              android:id="@+id/iridium5Text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              android:layout_marginTop="12dp"
              android:layout_toEndOf="@+id/linearLayoutTopImage"
              android:layout_toRightOf="@+id/linearLayoutTopImage"
              android:fontFamily="sans-serif-condensed"
              android:text="Iridium NEXT 40 50"
              android:textAlignment="textStart"
              android:textAllCaps="false"
              android:textAppearance="@style/TextAppearance.AppCompat.Body1"
              android:textColor="@color/colorRedDragon"
              android:textSize="16sp"
              android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

    <LinearLayout

        android:id="@+id/linearLayoutCenter"
        android:layout_width="400dp"
        android:layout_height="101dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="101dp"
            android:background="@color/colorLightGrey"
            tools:layout_editor_absoluteX="8dp"
            tools:layout_editor_absoluteY="109dp">

            <LinearLayout
                android:id="@+id/linearLayoutCenterImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/crs14"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:scaleType="fitStart"
                    app:srcCompat="@mipmap/crs14" />
            </LinearLayout>

            <TextView
              android:id="@+id/crs14Text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              ndroid:layout_marginTop="16dp"
              android:layout_toEndOf="@+id/linearLayoutCenterImage"
              android:layout_toRightOf="@+id/linearLayoutCenterImage"
              android:fontFamily="sans-serif-condensed"
              android:text="SpaceX NASA - CRS-14"
              android:textAlignment="center"
              android:textAllCaps="false"
              android:textAppearance="@style/TextAppearance.AppCompat.Body1"
              android:textColor="@color/colorRedDragon"
              android:textSize="18sp"
              android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

    <LinearLayout

        android:id="@+id/linearLayoutCenterBottom"
        android:layout_width="400dp"
        android:layout_height="101dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="101dp"
            android:background="@color/colorLightGrey"
            tools:layout_editor_absoluteX="8dp"
            tools:layout_editor_absoluteY="109dp">

            <LinearLayout
                android:id="@+id/linearLayoutCenterBottomImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/bhu"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:scaleType="fitCenter"
                    app:srcCompat="@mipmap/spacexlogo"
                    tools:layout_editor_absoluteX="0dp"
                    tools:layout_editor_absoluteY="101dp" />
            </LinearLayout>

            <TextView
               android:id="@+id/bhuText"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignParentTop="true"
               android:layout_marginTop="12dp"
               android:layout_toEndOf="@+id/linearLayoutCenterBottomImage"
               android:layout_toRightOf="@+id/linearLayoutCenterBottomImage" 
               android:fontFamily="sans-serif-condensed"
               android:text="Bangabandhu-1"
               android:textAlignment="center"
               android:textAllCaps="false"
                android:textAppearance="@style/TextAppearance.AppCompat.Body1"
                android:textColor="@color/colorRedDragon"
                android:textSize="18sp"
                android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

我做错了什么?

【问题讨论】:

  • 您的布局文件不完整,您似乎有一个约束布局,但您没有在任何地方打开它
  • 抱歉这部分被剪掉了:&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"tools:context="com.companys.appx.appx.MainActivity"&gt;
  • 你成功了吗?

标签: android xml android-layout


【解决方案1】:

你好像对ConstraintLayout不熟悉。

没关系。不想使用时不要使用ConstraintLayout。没有必要使用它。

您只需将根布局更改为LinearLayoutRelativeLayout 或根据您的要求使用的任何其他布局。

我给你的是在这种情况下你应该使用的代码。在该代码中,我使用 RelativeLayout 作为根布局,因为您使用的是 layout_alignParentBottom 之类的属性。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.companys.appx.appx.MainActivity">

    <LinearLayout
        android:id="@+id/linearLayoutTop"
        android:layout_width="0dp"
        android:layout_height="101dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="11dp"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/relativeLayoutTop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorLightGrey">

            <LinearLayout
                android:id="@+id/linearLayoutTopImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/iridumNEXT40_50"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:adjustViewBounds="false"
                    android:cropToPadding="false"
                    android:scaleType="fitStart"
                    app:srcCompat="@mipmap/iridiummission5" />
            </LinearLayout>

            <TextView
              android:id="@+id/iridium5Text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              android:layout_marginTop="12dp"
              android:layout_toEndOf="@+id/linearLayoutTopImage"
              android:layout_toRightOf="@+id/linearLayoutTopImage"
              android:fontFamily="sans-serif-condensed"
              android:text="Iridium NEXT 40 50"
              android:textAlignment="textStart"
              android:textAllCaps="false"
              android:textAppearance="@style/TextAppearance.AppCompat.Body1"
              android:textColor="@color/colorRedDragon"
              android:textSize="16sp"
              android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayoutCenter"
        android:layout_width="400dp"
        android:layout_height="101dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="101dp"
            android:background="@color/colorLightGrey"
            tools:layout_editor_absoluteX="8dp"
            tools:layout_editor_absoluteY="109dp">

            <LinearLayout
                android:id="@+id/linearLayoutCenterImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/crs14"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:scaleType="fitStart"
                    app:srcCompat="@mipmap/crs14" />
            </LinearLayout>

            <TextView
              android:id="@+id/crs14Text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              android:layout_marginTop="16dp"
              android:layout_toEndOf="@+id/linearLayoutCenterImage"
              android:layout_toRightOf="@+id/linearLayoutCenterImage"
              android:fontFamily="sans-serif-condensed"
              android:text="SpaceX NASA - CRS-14"
              android:textAlignment="center"
              android:textAllCaps="false"
              android:textAppearance="@style/TextAppearance.AppCompat.Body1"
              android:textColor="@color/colorRedDragon"
              android:textSize="18sp"
              android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayoutCenterBottom"
        android:layout_width="400dp"
        android:layout_height="101dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="101dp"
            android:background="@color/colorLightGrey"
            tools:layout_editor_absoluteX="8dp"
            tools:layout_editor_absoluteY="109dp">

            <LinearLayout
                android:id="@+id/linearLayoutCenterBottomImage"
                android:layout_width="110dp"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/bhu"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_weight="1"
                    android:scaleType="fitCenter"
                    app:srcCompat="@mipmap/spacexlogo"
                    tools:layout_editor_absoluteX="0dp"
                    tools:layout_editor_absoluteY="101dp" />
            </LinearLayout>

            <TextView
               android:id="@+id/bhuText"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignParentTop="true"
               android:layout_marginTop="12dp"
               android:layout_toEndOf="@+id/linearLayoutCenterBottomImage"
               android:layout_toRightOf="@+id/linearLayoutCenterBottomImage" 
               android:fontFamily="sans-serif-condensed"
               android:text="Bangabandhu-1"
               android:textAlignment="center"
               android:textAllCaps="false"
               android:textAppearance="@style/TextAppearance.AppCompat.Body1"
               android:textColor="@color/colorRedDragon"
               android:textSize="18sp"
               android:textStyle="bold|italic" />

        </RelativeLayout>
    </LinearLayout>

</RelativeLayout>

如果代码有任何错误(错别字),请更改它。

唯一的一点是使用RelativeLayout作为根布局而不是ConstraintLayout

在上面的代码中,我从第一个LinearLayout 中删除了所有ConstraintLayout 属性,因为根布局不再是ConstraintLayout

这个技巧将解决问题。出现问题是因为 ContraintLayout 有自己的规则,而您没有遵循。但是现在您更改了根布局后,问题将不再存在。

【讨论】: