输入文本、图像和按钮卡在左上角
Input Text, Image and button stuck at the top left corner
我是 kotlin 的新手,现在正尝试在 android studio 中设计个人资料页面,如下图所示。
当我设计个人资料页面时,我发现应用程序中的设计显示正确。所以,我在 phone 模拟器中 运行 项目,然后所有内容都卡在左上角。之后,我尝试添加相对布局,但结果仍然相同。请问我哪里做错了,有什么解决办法吗?
编码如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity"
android:background="@color/white">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/white">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="141dp"
tools:layout_editor_absoluteY="98dp"
tools:srcCompat="@tools:sample/avatars"
android:contentDescription="@string/app_name"/>
<EditText
android:id="@+id/editTextTextPersonName2"
android:layout_width="175dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/first_name"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="265dp" />
<EditText
android:id="@+id/editTextTextPersonName3"
android:layout_width="175dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/last_name"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="220dp"
tools:layout_editor_absoluteY="265dp" />
<EditText
android:id="@+id/editTextTextEmailAddress"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textEmailAddress"
android:text="@string/email"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="333dp" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:text="@string/password"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="407dp"
android:inputType="textVisiblePassword"/>
<!--android:inputType="textPassword"-->
<EditText
android:id="@+id/editTextTextPassword2"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:text="@string/confirm_password"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="479dp"
android:inputType="textVisiblePassword"/>
<!--android:inputType="textPassword"-->
<Button
android:id="@+id/button"
android:layout_width="378dp"
android:layout_height="48dp"
android:text="@string/save"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="556dp" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
只需删除“RelativeLayout”标签。从此处了解有关“ConstraintLayout”的更多信息。 https://developer.android.com/training/constraint-layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity"
android:background="@color/white">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:contentDescription="@string/app_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:src="@mipmap/ic_launcher"/>
<EditText
android:id="@+id/editTextTextPersonName2"
android:layout_width="175dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="72dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/first_name"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<EditText
android:id="@+id/editTextTextPersonName3"
android:layout_width="175dp"
android:layout_height="48dp"
android:layout_marginTop="73dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/last_name"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<EditText
android:id="@+id/editTextTextEmailAddress"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textEmailAddress"
android:hint="@string/email"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textVisiblePassword"
android:hint="@string/password"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextEmailAddress" />
<EditText
android:id="@+id/editTextTextPassword2"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="textVisiblePassword"
android:hint="@string/confirm_password"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword2" />
</androidx.constraintlayout.widget.ConstraintLayout>
从这里复制答案没有用,它会让你为下一个布局而苦恼,相反我建议你看一下:
ConstraintLayout
的工作方式是使用 constraints 定义视图的位置和大小——比如“与父级的左边缘对齐”, “在此 ImageView
下方,边距为 16dp”,“在这两个视图之间填充 space,但保持 16:9 纵横比”等
您遇到了三个问题:
- 您正在使用
ConstraintLayout
但您没有设置任何限制,并且您已经使用 tools:ignore="MissingConstraints"
抑制了警告您的错误
- 您所有的东西都嵌套在
RelativeLayout
中,因此无论如何它都不会使用约束,并且 ConstraintLayout
是无用的
- 您在
RelativeLayout
(absoluteX
等等)中使用绝对定位 但是您使用的是 tools
前缀这是用于定义在设计时出现的内容 但在应用 运行ning 时不会出现 - 它用于测试、占位符文本等。另外 layout_editor_absoluteX
是一个特殊属性,仅在布局编辑器中有效 - 它就像您设计时的定位技巧。应用 运行ning 时不影响任何内容。
所以结果是 none 你的视图实际上设置了任何定位属性,它们都只是在左上角的原点结束
您可能应该放弃 RelativeLayout
方法和 learn to use ConstraintLayout
(这听起来像是您想要的)- 它更灵活,您将 运行 变成 it/need 在某些时候
我是 kotlin 的新手,现在正尝试在 android studio 中设计个人资料页面,如下图所示。
当我设计个人资料页面时,我发现应用程序中的设计显示正确。所以,我在 phone 模拟器中 运行 项目,然后所有内容都卡在左上角。之后,我尝试添加相对布局,但结果仍然相同。请问我哪里做错了,有什么解决办法吗?
编码如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity"
android:background="@color/white">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/white">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="141dp"
tools:layout_editor_absoluteY="98dp"
tools:srcCompat="@tools:sample/avatars"
android:contentDescription="@string/app_name"/>
<EditText
android:id="@+id/editTextTextPersonName2"
android:layout_width="175dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/first_name"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="265dp" />
<EditText
android:id="@+id/editTextTextPersonName3"
android:layout_width="175dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/last_name"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="220dp"
tools:layout_editor_absoluteY="265dp" />
<EditText
android:id="@+id/editTextTextEmailAddress"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:inputType="textEmailAddress"
android:text="@string/email"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="333dp" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:text="@string/password"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="407dp"
android:inputType="textVisiblePassword"/>
<!--android:inputType="textPassword"-->
<EditText
android:id="@+id/editTextTextPassword2"
android:layout_width="379dp"
android:layout_height="48dp"
android:ems="10"
android:text="@string/confirm_password"
android:textStyle="bold"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="479dp"
android:inputType="textVisiblePassword"/>
<!--android:inputType="textPassword"-->
<Button
android:id="@+id/button"
android:layout_width="378dp"
android:layout_height="48dp"
android:text="@string/save"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="556dp" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
只需删除“RelativeLayout”标签。从此处了解有关“ConstraintLayout”的更多信息。 https://developer.android.com/training/constraint-layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity"
android:background="@color/white">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:contentDescription="@string/app_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:src="@mipmap/ic_launcher"/>
<EditText
android:id="@+id/editTextTextPersonName2"
android:layout_width="175dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="72dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/first_name"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<EditText
android:id="@+id/editTextTextPersonName3"
android:layout_width="175dp"
android:layout_height="48dp"
android:layout_marginTop="73dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="@string/last_name"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<EditText
android:id="@+id/editTextTextEmailAddress"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textEmailAddress"
android:hint="@string/email"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textVisiblePassword"
android:hint="@string/password"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextEmailAddress" />
<EditText
android:id="@+id/editTextTextPassword2"
android:layout_width="379dp"
android:layout_height="48dp"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="textVisiblePassword"
android:hint="@string/confirm_password"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword2" />
</androidx.constraintlayout.widget.ConstraintLayout>
从这里复制答案没有用,它会让你为下一个布局而苦恼,相反我建议你看一下:
ConstraintLayout
的工作方式是使用 constraints 定义视图的位置和大小——比如“与父级的左边缘对齐”, “在此 ImageView
下方,边距为 16dp”,“在这两个视图之间填充 space,但保持 16:9 纵横比”等
您遇到了三个问题:
- 您正在使用
ConstraintLayout
但您没有设置任何限制,并且您已经使用tools:ignore="MissingConstraints"
抑制了警告您的错误
- 您所有的东西都嵌套在
RelativeLayout
中,因此无论如何它都不会使用约束,并且ConstraintLayout
是无用的 - 您在
RelativeLayout
(absoluteX
等等)中使用绝对定位 但是您使用的是tools
前缀这是用于定义在设计时出现的内容 但在应用 运行ning 时不会出现 - 它用于测试、占位符文本等。另外layout_editor_absoluteX
是一个特殊属性,仅在布局编辑器中有效 - 它就像您设计时的定位技巧。应用 运行ning 时不影响任何内容。
所以结果是 none 你的视图实际上设置了任何定位属性,它们都只是在左上角的原点结束
您可能应该放弃 RelativeLayout
方法和 learn to use ConstraintLayout
(这听起来像是您想要的)- 它更灵活,您将 运行 变成 it/need 在某些时候