【问题标题】:Why my layout not fill well on small screen?为什么我的布局在小屏幕上不能很好地填充?
【发布时间】:2020-10-24 04:41:28
【问题描述】:

我不知道为什么按钮不根据屏幕尺寸缩小,因为我使用了ConstraintLayout。每当我使用 4" 的屏幕尺寸时,它都不太适合。此外,随着 appcompat:1.1.0 的更新,TextInputLayout 得到了额外的填充。我不知道如何修复它。 这是我的代码:

<?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"
    android:padding="10dp"
    tools:context=".activities.MainActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/til_formula_bar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:hintEnabled="false"
        app:layout_constraintBottom_toTopOf="@+id/textInputLayout4"
        app:layout_constraintEnd_toStartOf="@+id/b_copy"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/tiet_formula_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="false"
            android:inputType="none"
            android:maxLength="40"
            android:singleLine="true"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            tools:layout_editor_absoluteY="11dp" />

        <androidx.appcompat.widget.LinearLayoutCompat
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weightSum="2">

            <TextView
                android:id="@+id/tv_full_formula"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/tv_memory"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
        </androidx.appcompat.widget.LinearLayoutCompat>
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/b_copy"
        style="@style/myIconButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cornerRadius="0dp"
        app:icon="?attr/actionModeCopyDrawable"
        app:layout_constraintBottom_toBottomOf="@+id/til_formula_bar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/til_formula_bar"
        app:layout_constraintTop_toTopOf="@+id/til_formula_bar" />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/textInputLayout4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:minHeight="20dp"
        app:hintEnabled="false"
        app:layout_constraintBottom_toTopOf="@+id/b_save_hisab"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/til_formula_bar">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/tiet_hisab_description"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="2"
            android:hint="@string/details"
            android:inputType="textAutoCorrect|textMultiLine|textAutoComplete"
            android:textAppearance="@style/TextAppearance.AppCompat.Small" />
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/b_save_hisab"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="@string/save"
        app:icon="@android:drawable/ic_menu_save"
        app:iconGravity="textStart"
        app:layout_constraintBottom_toTopOf="@+id/b_date"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textInputLayout4" />

    <Button
        android:id="@+id/b_date"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:insetLeft="6dp"
        android:insetRight="6dp"
        android:textSize="10sp"
        app:icon="@android:drawable/ic_menu_my_calendar"
        app:iconGravity="textStart"
        app:layout_constraintBottom_toTopOf="@+id/ctl_calcy"
        app:layout_constraintEnd_toStartOf="@+id/b_picture"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/b_save_hisab" />

    <Button
        android:id="@+id/b_picture"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:insetLeft="6dp"
        android:insetRight="6dp"
        android:text="@string/attachments"
        app:icon="@android:drawable/stat_notify_more"
        app:layout_constraintBaseline_toBaselineOf="@+id/b_date"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/b_date"
        app:srcCompat="@android:drawable/ic_menu_camera" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/ctl_calcy"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/b_date"
        tools:visibility="invisible">

        <Button
            android:id="@+id/b_mem_minus_equals"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol__mem_minus_equals"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_mem_add_equals"
            app:layout_constraintEnd_toStartOf="@+id/b_mem_recall"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_mem_add_equals" />

        <Button
            android:id="@+id/b_eight"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_zero"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_seven"
            app:layout_constraintEnd_toStartOf="@+id/b_nine"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_seven" />

        <Button
            android:id="@+id/b_three"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_three"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_two"
            app:layout_constraintEnd_toStartOf="@+id/b_plus"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_two" />

        <Button
            android:id="@+id/b_nine"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_nine"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_eight"
            app:layout_constraintEnd_toStartOf="@+id/b_multiply"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_eight" />

        <Button

            android:id="@+id/b_percentage"

            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_percent"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_zero"
            app:layout_constraintEnd_toStartOf="@+id/b_divide"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_zero" />

        <Button
            android:id="@+id/b_clear"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_clear"
            app:layout_constraintBottom_toTopOf="@+id/b_mem_clear"
            app:layout_constraintEnd_toStartOf="@+id/ib_backspace"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/b_minus"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_minus"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_six"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_six" />

        <Button
            android:id="@+id/b_mem_clear"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_meme_clear"
            app:layout_constraintBottom_toTopOf="@+id/b_one"
            app:layout_constraintEnd_toStartOf="@+id/b_mem_add_equals"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/b_clear" />

        <Button
            android:id="@+id/b_divide"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_divide"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_percentage"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_percentage" />

        <Button
            android:id="@+id/b_five"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_five"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_four"
            app:layout_constraintEnd_toStartOf="@+id/b_six"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_four" />

        <Button

            android:id="@+id/b_plus"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_plus"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_three"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_three" />

        <Button
            android:id="@+id/ib_backspace"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/backspace"
            app:icon="@android:drawable/ic_input_delete"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_clear"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_clear"
            app:srcCompat="@android:drawable/ic_input_delete" />

        <Button
            android:id="@+id/b_multiply"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_multiply"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_nine"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_nine" />

        <Button

            android:id="@+id/b_decimal"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_decimal"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/b_zero"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/b_seven" />

        <Button
            android:id="@+id/b_one"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_one"
            app:layout_constraintBottom_toTopOf="@+id/b_four"
            app:layout_constraintEnd_toStartOf="@+id/b_two"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/b_mem_clear" />

        <Button
            android:id="@+id/b_four"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_four"
            app:layout_constraintBottom_toTopOf="@+id/b_seven"
            app:layout_constraintEnd_toStartOf="@+id/b_five"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/b_one" />

        <Button
            android:id="@+id/b_zero"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_zero"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_decimal"
            app:layout_constraintEnd_toStartOf="@+id/b_percentage"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_decimal" />

        <Button
            android:id="@+id/b_two"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_two"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_one"
            app:layout_constraintEnd_toStartOf="@+id/b_three"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_one" />

        <Button
            android:id="@+id/b_mem_add_equals"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_mem_plus_equals"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_mem_clear"
            app:layout_constraintEnd_toStartOf="@+id/b_mem_minus_equals"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_mem_clear" />

        <Button
            android:id="@+id/b_mem_recall"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/symbol_mem_recall"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_mem_minus_equals"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_mem_minus_equals" />

        <Button
            android:id="@+id/b_seven"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_seven"
            app:layout_constraintBottom_toTopOf="@+id/b_decimal"
            app:layout_constraintEnd_toStartOf="@+id/b_eight"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/b_four" />

        <Button
            android:id="@+id/b_six"
            style="@style/Widget.MaterialComponents.Button.OutlinedButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:insetLeft="6dp"
            android:insetRight="6dp"
            android:text="@string/digit_six"
            app:layout_constraintBaseline_toBaselineOf="@+id/b_five"
            app:layout_constraintEnd_toStartOf="@+id/b_minus"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/b_five" />
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

布局屏幕

【问题讨论】:

    标签: android android-layout android-constraintlayout android-button android-textinputlayout


    【解决方案1】:

    替换这个:

    android:layout_height="wrap_content" 并且:

    用这个:

    android:layout_height="0dp"
    android:layout_width="0dp"
    app:layout_constraintHeight_percent="0.1"
    app:layout_constraintWidth_percent="0.1"
    

    对每个按钮都这样做。

    wrap_content 表示您的按钮将根据自己的高度获取高度(它不响应)。

    使用时
    app:layout_constraintHeight_percent="0.1"
    app:layout_constraintWidth_percent="0.1"

    根据屏幕大小,您的按钮的宽度和高度都将是 10%,现在只需更改数字,它就会保持响应。

    【讨论】:

    • 你的意思是什么 - 它没有响应吗?没有编译吗?
    • 当我进行这些更改时,我的布局完全扭曲了。我想知道如何显示更改。
    • 你把app:layout_constraintHeight_percent="0.1"改成0.005这样更小的值了吗
    • 不,我完全按照您所说的更改了代码 -> 在所有按钮小部件中进行了这些更改。
    • 所以你所做的是 - 每个按钮的高度根据屏幕的 10%,给按钮小一点的数字并玩弄它
    【解决方案2】:

    试试这个“附件”按钮

    <Button
        android:id="@+id/b_picture"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:insetLeft="6dp"
        android:insetRight="6dp"
        android:text="@string/attachments"
        app:icon="@android:drawable/stat_notify_more"
        app:layout_constraintTop_toTopOf="@+id/b_date"
        app:layout_constraintBottom_toBottomOf="@+id/b_date"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/b_date"
        app:srcCompat="@android:drawable/ic_menu_camera" />
    

    对于 TextInputLayout, 您可以通过设置 app:hintEnabled="false" 来移除 AppCompatEditText 上方的额外空间,但在您重新启用之前它不会显示提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2021-02-26
      • 2020-04-25
      相关资源
      最近更新 更多