Расположение кнопок с андроидом: избавьтесь от вертикального пробела

Я новичок в андроиде. Я знаю макеты в основном из LaTex, но также на уровне непрофессионала из Swing, SWT и javafx.

В качестве упражнения я попробовал очень простую компоновку калькулятора, которая, по сути, сводится к наличию набора кнопок.

Что бы я ни пробовал, между рядами кнопок остается расстояние по вертикали.

Я изменил цвет фона строк, чтобы увидеть, кому принадлежит нежелательное пространство.

Скриншот:

Код (xml):

<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"
    tools:context = ".MainActivity">

    <TableLayout
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginTop = "1dp"
        app:layout_constraintTop_toTopOf = "parent"
        tools:layout_editor_absoluteX = "-28dp">

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:layout_marginTop = "1dp"
            android:background = "#00ff00">

            <ImageButton
                android:id = "@+id/imageButton1"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton2"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton3"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton4"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton5"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />
        </TableRow>

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_marginTop = "1dp"
            android:background = "@color/black">

            <ImageButton
                android:id = "@+id/imageButton11"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton12"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton13"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton14"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton15"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "0dp"
                android:layout_marginLeft = "0dp"
                android:layout_marginTop = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />
        </TableRow>

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />
    </TableLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Я хочу избавиться от зеленого и черного пространства над и под кнопками, которые, очевидно, принадлежат строкам таблицы.

Как я могу это сделать, и помимо волшебных слов, я хотел бы понять, что и почему пошло не так.

До того, как я использовал макет таблицы, я пробовал вертикальный макет с вложенными горизонтальными макетами с более или менее таким же результатом.

1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно установить отступ для каждого ImageButton на 0, используя android:padding = "0dp", так как кажется, что стиль ImageButton по умолчанию имеет это дополнение.

<?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"
    tools:context = ".MainActivity">

    <TableLayout
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent">

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:background = "#00ff00">

            <ImageButton
                android:id = "@+id/imageButton1"
                android:layout_width = "wrap_content"
                android:padding = "0dp"
                android:layout_height = "wrap_content"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton2"
                android:layout_width = "wrap_content"
                android:padding = "0dp"
                android:layout_height = "wrap_content"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton3"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton4"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton5"
                android:layout_width = "wrap_content"
                android:padding = "0dp"
                android:layout_height = "wrap_content"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />
        </TableRow>

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:background = "@color/black">

            <ImageButton
                android:id = "@+id/imageButton11"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton12"
                android:layout_width = "wrap_content"
                android:padding = "0dp"
                android:layout_height = "wrap_content"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton13"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton14"
                android:layout_width = "wrap_content"
                android:padding = "0dp"
                android:layout_height = "wrap_content"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />

            <ImageButton
                android:id = "@+id/imageButton15"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "0dp"
                android:src = "@drawable/img_a"
                tools:srcCompat = "@tools:sample/avatars" />
        </TableRow>

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />

        <TableRow
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />
    </TableLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Как только вы узнаете, что существует такая вещь, как «android:padding»… . Большое спасибо, это решило мою проблему.

Gyro Gearloose 24.12.2020 19:59

@GyroGearloose Я нашел это здесь это стиль по умолчанию, применяемый к ImageButton, отступ по умолчанию составляет 8 dp в 4 направлениях.

Zain 24.12.2020 20:07

@GyroGearloose ищите Base.Widget.AppCompat.ImageButton в здесь , которое является значением стиля фреймворка Android по умолчанию... вы получите abc_btn_default_mtrl_shape для ImagreButton, которое можно найти здесь

Zain 24.12.2020 20:10

Еще раз спасибо, с помощью этих ссылок я также решил свою следующую проблему: нижний и верхний индексы не работают для кнопок по умолчанию, а все греческие буквы преобразованы в верхний регистр: есть переключатель android:textAllCaps = "false", который по умолчанию является истинным.

Gyro Gearloose 25.12.2020 12:15

Другие вопросы по теме