首页 > 解决方案 > 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>

在此处输入图像描述

标签: androidxml

解决方案


考虑使用“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>

推荐阅读