【问题标题】:ConstraintLayout for AndroidAndroid 的约束布局
【发布时间】:2020-05-18 19:23:31
【问题描述】:

这是我设计布局时应用在 IDE 中的样子

但是,这就是我手机上的样子。

将约束设置为父组件还是最近的组件更好?

【问题讨论】:

  • 将其设置为最近的组件。您必须将至少一个组件约束到父组件。
  • 您能否分享 layout.xml 文件,以便我们查看代码并为您提供帮助?谢谢!
  • Reaz Murshed 我英语说得不好,对不起:>

标签: android android-layout android-constraintlayout


【解决方案1】:

如果您将约束设置为最近的元素会更好,而且我不是专家,但在最佳实践中,我看到人们更喜欢线性布局来进行您的页面设计。

如果您附上您的代码,我将能够更好地回答。

【讨论】:

    【解决方案2】:

    抱歉,我在答案中添加了我的代码,因为我无法编辑我的问题“看起来您的帖子主要是代码;请添加更多详细信息”

    <?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">
    
    
    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="4dp"
        android:text="TextView"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/name" />
    
    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="4dp"
        android:text="TextView"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/age" />
    
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="130dp"
        android:layout_height="130dp"
        android:layout_marginTop="32dp"
        android:background="@drawable/ic_launcher_background"
        android:src="@drawable/ic_launcher_foreground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintCircleRadius="600dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.16"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />
    
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="pick img"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.255"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />
    
    <TextView
        android:id="@+id/terms"
        android:layout_width="125dp"
        android:layout_height="170dp"
        android:layout_marginStart="36dp"
        android:layout_marginLeft="36dp"
        android:layout_marginTop="65dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.848"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.181"
        tools:text="@tools:sample/lorem/random" />
    
    <EditText
        android:id="@+id/name"
        android:layout_width="173dp"
        android:layout_height="43dp"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="44dp"
        android:layout_marginEnd="194dp"
        android:layout_marginRight="194dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.209" />
    
    <EditText
        android:id="@+id/age"
        android:layout_width="172dp"
        android:layout_height="43dp"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="195dp"
        android:layout_marginRight="195dp"
        android:layout_marginBottom="422dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="age"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/name"
        app:layout_constraintVertical_bias="0.0" />
    
    <EditText
        android:id="@+id/phone"
        android:layout_width="172dp"
        android:layout_height="37dp"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="195dp"
        android:layout_marginRight="195dp"
        android:layout_marginBottom="361dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="phone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/age"
        app:layout_constraintVertical_bias="0.0" />
    
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="496dp"
        android:layout_marginEnd="317dp"
        android:layout_marginRight="317dp"
        android:layout_marginBottom="216dp"
        android:text="Country"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="169dp"
        android:layout_height="23dp"
        android:layout_marginStart="9dp"
        android:layout_marginLeft="9dp"
        android:layout_marginTop="496dp"
        android:entries="@array/items"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.54"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />
    
    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="106dp"
        android:layout_height="43dp"
        android:layout_marginStart="264dp"
        android:layout_marginLeft="264dp"
        android:layout_marginTop="9dp"
        android:layout_marginBottom="100dp"
        android:checked="true"
        android:text="Agree"
        app:layout_constraintBottom_toTopOf="@+id/spinner"
        app:layout_constraintEnd_toEndOf="@+id/terms"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/terms" />
    
    <Button
        android:id="@+id/button2"
        android:layout_width="144dp"
        android:layout_height="53dp"
        android:layout_marginStart="160dp"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="62dp"
        android:layout_marginEnd="160dp"
        android:layout_marginRight="160dp"
        android:text="REGister"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.471"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.79" />
    
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="321dp"
        android:layout_marginRight="321dp"
        android:text="Gender"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.527"
        tools:ignore="MissingConstraints" />
    
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="24dp"
        android:text="TextView"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />
    
    <RadioGroup
        android:layout_width="242dp"
        android:layout_height="58dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.538"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.616" >
    
        <RadioButton
            android:id="@+id/male"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:text="male" />
    
        <RadioButton
            android:id="@+id/female"
            android:layout_width="match_parent"
            android:layout_height="28dp"
            android:text="female" />
    </RadioGroup>
    
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    【讨论】:

    • 只需添加相对于最近元素的约束,您应该会获得所需的输出。此外,如果您想专门为您的手机设计它,您应该将 android studio 中的显示尺寸更改为与您的手机相似的尺寸。如果您想支持多种屏幕尺寸,请查看此帖子。stackoverflow.com/questions/8255985/…
    【解决方案3】:

    我看到您使用了很多硬编码的边距,这不可避免地会在不同的设备上产生一些不良影响。我不会修复您的代码,而是为您提供一些想法,以了解完全灵活的布局。

    文本 - 您可以将 autotextsize 设置为统一,这仅在使用匹配父/约束属性时有效,这意味着如果您保留 wrap_content 则不会发生任何事情

    General - 宽度/高度百分比,您可以设置整个屏幕的百分比(从 0 到 1),这仅在设置宽度/高度以匹配约束 (0dp) 时生效。您可以将其与 autotextsize 结合起来,根据您正在运行的手机制作可调整大小的文本视图

    指南 - 这些不会出现在应用程序中,它们仅用于设置百分比值,这意味着您可以将其设置为例如 10% 并将视图限制为它。要制作指南,请执行以下操作:右键单击布局编辑器 - 助手 - 指南(水平或垂直),然后更改值单击指南开头看起来像三角形的图标两次(你会看到它的作用):enter image description here

    障碍 - 如果您有多个通常没有静态大小的元素,它们会起作用。它们基本上可以防止任何这些元素越线。这有点高级,大多数情况下不需要

    - 选择多个元素(使用 shift 和单击)、右键单击、链,然后选择垂直或水平。这将使元素彼此之间保持相同的距离,这些非常有用,我建议您尝试并查看它们。

    这就是我能记住的全部了。在所有设备上实现相同的外观是如此困难,这让我一直很恼火。现在我已经学会了,只是需要一些时间,但最终我的 XML 文件包含 350 多行代码。 (主要是添加了这么多指南)。

    如果您有任何问题,我很乐意回答。

    编辑: 我建议关注这个女人:https://www.youtube.com/watch?v=h1LHzObflwo

    【讨论】:

    • 非常感谢,如果您有更多有用的教程,请提供给我。我正在为布局而苦苦挣扎。 :"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2021-04-09
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多