android - LinearLayout 在 XML Android 中无法正常工作
问题描述
***我想将我的观点排列在一个列中。为什么我做不到?我尝试了一些来自互联网的示例,但都不起作用。请帮助我,我是 XML 的初学者。
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:gravity="center"
xmlns:android="http://schemas.android.com/apk/res/android">
<EditText
android:id="@+id/phoneField"
android:layout_width="149dp"
android:layout_height="68dp"
android:layout_marginStart="24dp"
android:layout_marginTop="64dp"
android:layout_marginEnd="24dp"
android:hint="Телефон"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:selectAllOnFocus="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username" />
<EditText
android:id="@+id/et_email"
android:layout_width="235dp"
android:layout_height="75dp"
android:layout_marginStart="24dp"
android:layout_marginTop="308dp"
android:layout_marginEnd="24dp"
android:hint="Email"
android:inputType="textEmailAddress"
android:selectAllOnFocus="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/nameField"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="496dp"
android:hint="Имя"
android:inputType="textEmailAddress"
android:selectAllOnFocus="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.125"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_password"
android:layout_width="299dp"
android:layout_height="118dp"
android:layout_gravity="center"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:hint="@string/prompt_password"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:selectAllOnFocus="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username" />
<Button
android:id="@+id/btn_sign_in"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="REG"
tools:layout_editor_absoluteX="210dp"
android:layout_gravity="center"
tools:layout_editor_absoluteY="238dp" />
<Button
android:id="@+id/btn_registration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign"
android:layout_gravity="center"
tools:layout_editor_absoluteX="40dp"
tools:layout_editor_absoluteY="216dp" />
</LinearLayout>
解决方案
考虑使用“wrap_content”和“match_parent”,以便系统计算它,而不是为某个 dp 值提供宽度和高度。它通常可以工作并且可能会更好,因为考虑不同的屏幕尺寸几乎是不可能的,或者至少非常困难。
如https://stackoverflow.com/a/65850924/7402956中所述,代码中有一些约束布局的属性。它在线性布局中不起作用。
我发现非常有用的参考资料
约束布局:https ://constraintlayout.com/basics/
线性布局:https ://developer.android.com/guide/topics/ui/layout/linear
我修改了删除绝对宽度和高度的代码。删除了某些视图的顶部边距,因为它们很大以适合屏幕。
示例代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
xmlns:android="http://schemas.android.com/apk/res/android">
<EditText
android:id="@+id/phoneField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:hint="Телефон"
android:imeActionLabel="test-@string/action_sign_in_short"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:selectAllOnFocus="true" />
<EditText
android:id="@+id/et_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:hint="Email"
android:inputType="textEmailAddress"
android:selectAllOnFocus="true" />
<EditText
android:id="@+id/nameField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:hint="Имя"
android:inputType="textEmailAddress"
android:selectAllOnFocus="true" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:hint="test-@string/prompt_password"
android:imeActionLabel="test-@string/action_sign_in_short"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:selectAllOnFocus="true" />
<Button
android:id="@+id/btn_sign_in"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="REG"
android:layout_gravity="center" />
<Button
android:id="@+id/btn_registration"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sign"
android:layout_gravity="center" />
</LinearLayout>
推荐阅读
- visual-studio-code - 看不到如何在 VS Code 中禁用键入自动建议下拉菜单
- javascript - 替代使用多个标志来显示隐藏多个元素
- amazon-web-services - Amazon EMR 与 Amazon Redshift
- slack - 用于搜索外部数据源的 Slack 对话框
- javascript - 页面在浏览器中被杀死后如何运行任务?
- firebase - 在 null 上调用了 Flutter 方法“resetPassword”
- java - 如何为自定义光标创建单独的类
- flutter - 你如何在 Flutter Web 上使用 SVG?
- javascript - 如何将我的数组数组中每个数组的第一个索引从字符串转换为整数?
- android - 如何在 Mapbox android 中添加自定义视图作为标记?