- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 ConstraintLayout 为我的 android 应用程序构建了一个布局。该应用程序将只能在手机上使用(没有电视或平板电脑)。但老实说,我不知道如何使布局完全适合手机尺寸。
这是我的一项 Activity
<?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"
android:background="@color/colorPrimary"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="@font/billabong"
android:gravity="center"
android:text="Applikáció"
android:textColor="@color/white"
android:textSize="65sp"
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.054" />
<android.support.design.widget.TextInputLayout
android:id="@+id/inputLayoutEmail"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:textColorHint="@color/inputText"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.255">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/inputText"
android:hint="E-mail cim"
android:inputType="text"
android:textColor="@color/colorAccent"
android:textColorHint="@color/colorPrimaryLight"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="214dp" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/inputLayoutPassword"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:textColorHint="@color/inputText"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputLayoutEmail"
app:layout_constraintVertical_bias="0.0">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/inputText"
android:textColor="@color/colorAccent"
android:hint="Jelszó"
android:inputType="textPassword"
android:textColorHint="@color/colorPrimaryLight" />
</android.support.design.widget.TextInputLayout>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="21dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:buttonTint="@color/colorAccent"
android:hint="Maradjak bejelentkezve"
android:textColorHint="@color/inputText"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputLayoutPassword"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/login_button"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="28dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/button_style_1"
android:onClick="onClickButtonMain"
android:text="Bejelentkezés"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/registration_button"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/button_style_blue"
android:onClick="onClickButtonMain"
android:text="Regisztráció"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/login_button"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/information_button"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/button_style_2"
android:onClick="onClickButtonMain"
android:text="Lépések"
android:textColor="@color/colorAccent"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/registration_button"
app:layout_constraintVertical_bias="0.612" />
</android.support.constraint.ConstraintLayout>
此布局在 Pixel 上看起来很棒,但例如在 Nexus S 上,按钮和边距实际上并不关心我如何定义它们。我真的很想知道我做错了什么。我希望能够构建响应式布局。
最佳答案
在 Android 中,开发 Android 应用程序时需要考虑不同屏幕尺寸的数量。
不同的手机有不同的屏幕尺寸,在您的布局中,您在 View 上使用固定尺寸(例如,固定尺寸为 android:layout_width="300dp"
)并且结果是在一个屏幕(您的 android studio 预览屏幕)上看起来不错,但在另一个屏幕(您的实际手机)上看起来就不好。
对于您的情况,我建议使用 Chains和 Guildelines ,这将使您的布局响应。
这是您要使用 ConstraintLayout 实现的布局示例:
<?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">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:text="Applikáció"
android:textSize="65sp"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="0dp" />
<android.support.design.widget.TextInputLayout
android:id="@+id/inputLayoutEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColorHint="@color/inputText"
app:layout_constraintBottom_toTopOf="@+id/inputLayoutPassword"
app:layout_constraintEnd_toStartOf="@+id/guideline7"
app:layout_constraintStart_toStartOf="@+id/guideline8"
app:layout_constraintTop_toTopOf="@+id/guideline6">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/inputText"
android:hint="E-mail cim"
android:inputType="text"
android:textColor="@color/colorAccent"
android:textColorHint="@color/colorPrimaryLight" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/inputLayoutPassword"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColorHint="@color/inputText"
app:layout_constraintBottom_toTopOf="@+id/checkBox"
app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
app:layout_constraintTop_toBottomOf="@+id/inputLayoutEmail">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/inputText"
android:hint="Jelszó"
android:inputType="textPassword"
android:textColor="@color/colorAccent"
android:textColorHint="@color/colorPrimaryLight" />
</android.support.design.widget.TextInputLayout>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:buttonTint="@color/colorAccent"
android:hint="Maradjak bejelentkezve"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@+id/login_button"
app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
app:layout_constraintTop_toBottomOf="@+id/inputLayoutPassword" />
<Button
android:id="@+id/login_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="onClickButtonMain"
android:text="Bejelentkezés"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/registration_button"
app:layout_constraintEnd_toStartOf="@+id/guideline7"
app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
app:layout_constraintTop_toBottomOf="@+id/checkBox" />
<Button
android:id="@+id/registration_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="onClickButtonMain"
android:text="Regisztráció"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/information_button"
app:layout_constraintEnd_toStartOf="@+id/guideline7"
app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
app:layout_constraintTop_toBottomOf="@+id/login_button" />
<Button
android:id="@+id/information_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="onClickButtonMain"
android:text="Lépések"
android:textColor="@color/colorAccent"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
app:layout_constraintTop_toBottomOf="@+id/registration_button" />
<android.support.constraint.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="20dp"
app:layout_constraintGuide_percent="0.25" />
<android.support.constraint.Guideline
android:id="@+id/guideline7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".9" />
<android.support.constraint.Guideline
android:id="@+id/guideline8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".1" />
</android.support.constraint.ConstraintLayout>
它将看起来像这样(我从布局编辑器中添加了一张图片,以便您可以看到指南):
现在剩下要做的就是设置 View 的样式并准备好布局。
关于android - ConstraintLayout 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836626/
我正在开发一个 Android 库,这个库有一些布局 Activity 。 在布局中,我有下一个代码 ... Make sure you have correct i
我想以编程方式将一个 ConstraintLayout 放入另一个 ConstraintLayout 中。但是,如果我按照之前使用 RelativeLayout 的方式对其进行膨胀,它不会显示。 这是
我在我的布局中使用 androidx.constraintlayout.widget.ConstraintLayout 并且它不显示链,我也不能拖动任何小部件。我只需键入要使用的约束。 这是 and
我注意到我可以注释掉 implementation 'androidx.constraintlayout:constraintlayout:2.0.4'尽管我在我的应用程序中使用了 Constrain
我尝试以编程方式添加 ConstraintLayout。它在工作,但 WRAP_CONTENT 不工作。布局始终为 MATCH_PARENT。 Android 开发者页面没有为 ConstraintL
使用 Android Studio 菜单选项 Refactor -> Refactor to Androidx...迁移到 Androidx 包后... 我收到以下错误: Error inflatin
我正在尝试学习 Android 开发,但问题是我的应用程序每次尝试运行时都会崩溃,并且在 logcat 中出现以下错误: 2019-06-30 16:17:18.198 5317-5317/? E/e
我刚刚通过 Android Studio 菜单选项 重构 -> 重构到 AndroidX 迁移到 androidx 我收到以下错误: android.view.InflateException: Bi
我遇到一个错误,ConstraintLayout 中存在空对象引用 Logcat E/UncaughtException: java.lang.NullPointerException: Attemp
如问题标题所示,我已经搜索了我的问题的答案,并找到了 Error inflating class androidx.constraintlayout.ConstraintLayout after mi
因此,我更新了我的 gradle 文件,我的应用开始崩溃并出现一些奇怪的错误。它开始莫名其妙地崩溃,而且我的 java 类中的抽屉导航代码也出现了错误,这是我以前没有遇到过的。 我已经尝试使用我的版本
当我尝试使用 XML 在覆盖中插入 Compose(在其他应用程序上绘制)时,我得到了这个异常: java.lang.IllegalStateException: ViewTreeLifecycleO
我正在尝试通过 CodingInFlow 在 YouTube 上关注 Android Studio 开发的播放列表。 我正在尝试关注此视频,但遇到了问题... https://www.youtube.
在android studio SDK工具中有两个ConstraintLayout选项,一个是ConstraintLayout for android,另一个是Solver for Constrain
我有一个非常令人沮丧的错误,我无法解释。我创建了一个 Android 应用程序,它使用 Androidx AppCompat 来使其与旧版本兼容。这是我的主要 Activity 布局文件:{Andro
免责声明:我知道 Compose 刚刚进入 alpha01,因此我不希望每个功能可用。但是,特定布局案例的布局和处理是恕我直言的一个重要主题应该尽早解决 😉。 当前基于 View Constrain
Attempt to invoke virtual method 'boolean androidx.constraintlayout.solver.widgets.ConstraintWidgetC
我正在尝试自己学习android开发,因为我试图使用按钮和 TextView 制作一个简单的文本更改应用程序,但是当使用USB在我自己的手机上运行它时,不幸的是,它开始显示该应用程序已经停止。如果您不
我遇到了一个奇怪的问题:layout.xml 我正在尝试将一个小部件连接到我的屏障。问题是,当我尝试将我的小部件的 END 与 barrier 连接时,没有
所以我有一个 RecycleView 的布局文件,它具有可展开/可折叠的 View 。 点击标题会展开/折叠额外的数据。在编辑器中一切看起来都很好。但是,它会有一个类似于 layout_marginB
我是一名优秀的程序员,十分优秀!