Android LinearLayout не выглядит одинаково на реальном устройстве - PullRequest
1 голос
/ 25 апреля 2019

Я создаю цифровую цифровую клавиатуру для приложения Android. Я использовал несколько горизонтальных LinearLayout для этого.

Вот код, относящийся к этой части activity:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="67dp">

    <ImageView
        android:id="@+id/digit1"
        android:layout_width="117dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/rsz_untitled_3" />

    <ImageView
        android:id="@+id/digit2"
        android:layout_width="118dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_2" />

    <ImageView
        android:id="@+id/digit3"
        android:layout_width="100dp"
        android:layout_height="67dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/digit_3" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="70dp">

    <ImageView
        android:id="@+id/digit4"
        android:layout_width="117dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_4" />

    <ImageView
        android:id="@+id/digit5"
        android:layout_width="118dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_5" />

    <ImageView
        android:id="@+id/digit6"
        android:layout_width="100dp"
        android:layout_height="67dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/digit_6" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="64dp">

    <ImageView
        android:id="@+id/digit7"
        android:layout_width="117dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_7" />

    <ImageView
        android:id="@+id/digit8"
        android:layout_width="118dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_8" />

    <ImageView
        android:id="@+id/digit9"
        android:layout_width="100dp"
        android:layout_height="67dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/digit_9" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="64dp">

    <ImageView
        android:id="@+id/digitvoid"
        android:layout_width="117dp"
        android:layout_height="67dp" />

    <ImageView
        android:id="@+id/digit0"
        android:layout_width="118dp"
        android:layout_height="67dp"
        app:srcCompat="@drawable/digit_0" />

    <ImageView
        android:id="@+id/digitdelete"
        android:layout_width="100dp"
        android:layout_height="67dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/digit_delete" />

</LinearLayout>

enter image description here

enter image description here

Здесь вы можете увидеть, как это выглядит в Android studio , и как это выглядит на реальном устройстве. Я не понимаю, почему это происходит. Я использую dp (в моем понимании это динамические пиксели), поэтому они должны хорошо масштабироваться на каждом устройстве.

Ответы [ 6 ]

1 голос
/ 26 апреля 2019

Вы используете фиксированный размер для ваших просмотров, потому что разные телефоны получили разные размеры экрана, что сделает ваш экран не реагирующим.

Если вы хотите использовать LinearLayout, вы, вероятно, захотите использовать атрибуты android:layout_weight и android:weightSum, чтобы придать вашим представлениям некоторый размер относительно экрана. Вы можете сделать это, и это сработает, но все вложенные представления, скорее всего, будут влиять на производительность ваших макетов.

Если вы хотите макет, который будет реагировать на все размеры экрана, вы можете использовать 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"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

<Button
    android:id="@+id/button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="1"
    app:layout_constraintBottom_toBottomOf="@+id/button10"
    app:layout_constraintEnd_toStartOf="@+id/button10"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/button10" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="0"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/button11"
    app:layout_constraintStart_toEndOf="@+id/button5"
    app:layout_constraintTop_toBottomOf="@+id/button4" />

<Button
    android:id="@+id/button11"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="x"
    app:layout_constraintBottom_toBottomOf="@+id/button2"
    app:layout_constraintEnd_toEndOf="@+id/button3"
    app:layout_constraintStart_toEndOf="@+id/button4"
    app:layout_constraintTop_toTopOf="@+id/button2" />

<Button
    android:id="@+id/button3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="8"
    app:layout_constraintBottom_toBottomOf="@+id/button4"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button4"
    app:layout_constraintTop_toTopOf="@+id/button4" />

<Button
    android:id="@+id/button4"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="8"
    app:layout_constraintBottom_toTopOf="@+id/button2"
    app:layout_constraintEnd_toStartOf="@+id/button3"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button5"
    app:layout_constraintTop_toBottomOf="@+id/button7" />

<Button
    android:id="@+id/button5"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="7"
    app:layout_constraintBottom_toBottomOf="@+id/button4"
    app:layout_constraintEnd_toStartOf="@+id/button4"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/button4" />

<Button
    android:id="@+id/button6"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="6"
    app:layout_constraintBottom_toBottomOf="@+id/button7"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button7"
    app:layout_constraintTop_toTopOf="@+id/button7" />

<Button
    android:id="@+id/button7"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="5"
    app:layout_constraintBottom_toTopOf="@+id/button4"
    app:layout_constraintEnd_toStartOf="@+id/button6"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button8"
    app:layout_constraintTop_toBottomOf="@+id/button10" />

<Button
    android:id="@+id/button8"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="4"
    app:layout_constraintBottom_toBottomOf="@+id/button7"
    app:layout_constraintEnd_toStartOf="@+id/button7"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/button7" />

<Button
    android:id="@+id/button9"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="3"
    app:layout_constraintBottom_toBottomOf="@+id/button10"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button10"
    app:layout_constraintTop_toTopOf="@+id/button10" />

<Button
    android:id="@+id/button10"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="2"
    app:layout_constraintBottom_toTopOf="@+id/button7"
    app:layout_constraintEnd_toStartOf="@+id/button9"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_chainStyle="packed" />
 </android.support.constraint.ConstraintLayout>

Это будет выглядеть так:

enter image description here

1 голос
/ 25 апреля 2019

Вот макет, который вам нужен, чтобы эта штука работала.ДП переводится в приблизительные размеры.Однако, если вы хотите разместить элементы в соответствии с размером экрана, вы можете использовать weight все время.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="67dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/digit1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/rsz_untitled_3" />

        <ImageView
            android:id="@+id/digit2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_2" />

        <ImageView
            android:id="@+id/digit3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_3" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/digit4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_4" />

        <ImageView
            android:id="@+id/digit5"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_5" />

        <ImageView
            android:id="@+id/digit6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_6" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/digit7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_7" />

        <ImageView
            android:id="@+id/digit8"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_8" />

        <ImageView
            android:id="@+id/digit9"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_9" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/digitvoid"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <ImageView
            android:id="@+id/digit0"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_0" />

        <ImageView
            android:id="@+id/digitdelete"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/digit_delete" />
    </LinearLayout>
</LinearLayout>
1 голос
/ 25 апреля 2019

Очевидно, что вы делаете это для третьего ряда:

android:layout_weight="1"

И это вызывает проблемы - если ваш экран недостаточно широк, чтобы следовать инструкции ширины, вы сообщаете, что все кнопки не одинаковы, так чтотолько последние кнопки должны быть изменены.

0 голосов
/ 25 апреля 2019

попробуйте

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:padding="2dp">

        <ImageView
            android:id="@+id/digit1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/rsz_untitled_3" />

        <ImageView
            android:id="@+id/digit2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_2" />

        <ImageView
            android:id="@+id/digit3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_3" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:padding="2dp">

        <ImageView
            android:id="@+id/digit4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_4" />

        <ImageView
            android:id="@+id/digit5"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_5" />

        <ImageView
            android:id="@+id/digit6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_6" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:padding="2dp">

        <ImageView
            android:id="@+id/digit7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_7" />

        <ImageView
            android:id="@+id/digit8"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_8" />

        <ImageView
            android:id="@+id/digit9"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_9" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:padding="2dp">

        <ImageView
            android:id="@+id/digitvoid"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight="1" />

        <ImageView
            android:id="@+id/digit0"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_0" />

        <ImageView
            android:id="@+id/digitdelete"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_margin="5dp"
            app:srcCompat="@drawable/digit_delete" />

    </LinearLayout>
</LinearLayout>
0 голосов
/ 25 апреля 2019

Пожалуйста, проверьте ниже код.Это может решить вашу проблему.Если у вас возникнут какие-либо проблемы, пожалуйста, дайте мне знать в разделе комментариев.

Используйте свои собственные чертежи и оценки.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="67dp">

        <ImageView
            android:id="@+id/digit1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="67dp">

        <ImageView
            android:id="@+id/digit4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit5"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="67dp">

        <ImageView
            android:id="@+id/digit7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit8"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digit9"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="67dp">

        <ImageView
            android:id="@+id/digitvoid"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <ImageView
            android:id="@+id/digit0"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

        <ImageView
            android:id="@+id/digitdelete"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            app:srcCompat="@drawable/add_more_icon" />

    </LinearLayout>
</LinearLayout>

Пожалуйста, подтвердите ответ, если он будет работать для вас.Спасибо!

0 голосов
/ 25 апреля 2019

пожалуйста, замените ваши 4 LinearLayout на это:

  <LinearLayout
    android:orientation="horizontal"
    android:weightSum="3"
    android:layout_weight="0.2"
    android:layout_width="match_parent"
    android:layout_height="0dip">

    <ImageView
        android:layout_weight="1"
        android:id="@+id/digit1"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/rsz_untitled_3" />

    <ImageView
        android:id="@+id/digit2"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_2" />

    <ImageView
        android:id="@+id/digit3"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_3" />

</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="3"
    android:layout_weight="0.2"
    android:layout_width="match_parent"
    android:layout_height="0dip">

    <ImageView
        android:id="@+id/digit4"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_4" />

    <ImageView
        android:id="@+id/digit5"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_5" />

    <ImageView
        android:id="@+id/digit6"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_6" />

</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="3"
    android:layout_weight="0.2"
    android:layout_width="match_parent"
    android:layout_height="0dip">

    <ImageView
        android:id="@+id/digit7"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_7" />

    <ImageView
        android:id="@+id/digit8"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_8" />

    <ImageView
        android:id="@+id/digit9"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_9" />

</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="3"
    android:layout_weight="0.2"
    android:layout_width="match_parent"
    android:layout_height="0dip">

    <ImageView
        android:id="@+id/digitvoid"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/digit0"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_0" />

    <ImageView
        android:id="@+id/digitdelete"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="match_parent"
        app:srcCompat="@drawable/digit_delete" />

</LinearLayout>

и добавьте родительский макет этого двух атрибутов:

android:orientation="vertical"
android:weightSum="1.0"

Примечание: Если вы хотите уменьшить высоту квадрата, просто уменьшите значение: android:layout_weight="0.2" до android:layout_weight="0.15"

...