Странная ошибка макета

У меня есть следующий файл layout.xml. e_btn_fretboard вообще не регистрирует щелчки. Даже когда я нажимаю на нее, она не меняется на цвет нажатого состояния. Все остальные кнопки работают. Я переместил кнопку в другую ячейку сетки и оставил ее пустой. И вот что: когда я переместил кнопку, она теперь регистрирует нажатие и меняет цвет на нажатое состояние.

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout 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.support.constraint.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">

        <ImageView
            android:id = "@+id/board_img"
            android:layout_width = "0dp"
            android:layout_height = "wrap_content"

            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintHorizontal_bias = "0.0"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toTopOf = "parent"
            app:srcCompat = "@drawable/fretboard_12" />
        <ImageView
            android:id = "@+id/fretmarker"
            android:layout_width = "14dp"
            android:layout_height = "14dp"
            android:src = "@drawable/fretmarker" />

        <ScrollView
            android:layout_width = "0dp"
            android:layout_height = "0dp"
            android:layout_marginEnd = "8dp"
            android:layout_marginStart = "8dp"
            android:layout_marginTop = "30dp"
            android:clipToPadding = "false"
            android:fillViewport = "false"
            android:scrollbars = "vertical"
            app:layout_constraintBottom_toBottomOf = "parent"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toBottomOf = "@+id/board_img"
            app:layout_constraintVertical_bias = "0.0">

            <LinearLayout
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:orientation = "vertical">

                <GridLayout
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginBottom = "8dp"
                    android:layout_marginEnd = "8dp"
                    android:layout_marginStart = "8dp"
                    android:layout_marginTop = "8dp"
                    android:columnCount = "3"
                    app:layout_constraintBottom_toBottomOf = "parent"
                    app:layout_constraintEnd_toEndOf = "parent"
                    app:layout_constraintStart_toStartOf = "parent"
                    app:layout_constraintTop_toBottomOf = "@+id/noteImage"

                    >

                    <Button
                        android:id = "@+id/c_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_columnWeight = "1"
                        android:layout_column = "0"
                        android:layout_row = "0"

                        android:text = "C"

                        />

                    <Button
                        android:id = "@+id/csharp_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "1"
                        android:layout_columnWeight = "1"
                        android:layout_row = "0"
                        android:text = "C#/Db"
                        android:textAllCaps = "false"
                        />



                    <Button
                        android:id = "@+id/d_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "2"
                        android:layout_columnWeight = "1"
                        android:layout_row = "0"
                        android:text = "D"

                        />

                    <Button
                        android:id = "@+id/dsharp_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "0"
                        android:layout_columnWeight = "1"
                        android:layout_row = "1"
                        android:text = "D#/Eb"
                        android:textAllCaps = "false" />

                    <Button
                        android:id = "@+id/e_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "1"
                        android:layout_columnWeight = "1"
                        android:layout_row = "1"
                        android:text = "E" />

                    <Button
                        android:id = "@+id/f_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "2"
                        android:layout_columnWeight = "1"
                        android:layout_row = "1"
                        android:text = "F" />

                    <Button
                        android:id = "@+id/fsharp_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "0"
                        android:layout_columnWeight = "1"
                        android:layout_row = "2"
                        android:text = "F#/Gb"
                        android:textAllCaps = "false" />

                    <Button
                        android:id = "@+id/g_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "1"
                        android:layout_columnWeight = "1"
                        android:layout_row = "2"
                        android:text = "G" />


                    <Button
                        android:id = "@+id/gsharp_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "2"
                        android:layout_columnWeight = "1"
                        android:layout_row = "2"
                        android:text = "G#/Ab"
                        android:textAllCaps = "false" />

                    <Button
                        android:id = "@+id/a_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "0"
                        android:layout_columnWeight = "1"
                        android:layout_row = "3"
                        android:text = "A"
                        android:textAllCaps = "false" />

                    <Button
                        android:id = "@+id/asharp_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "1"
                        android:layout_columnWeight = "1"
                        android:layout_row = "3"
                        android:text = "A#/Bb"
                        android:textAllCaps = "false"/>

                    <Button
                        android:id = "@+id/b_btn_fretboard"
                        android:layout_width = "wrap_content"
                        android:layout_height = "wrap_content"
                        android:layout_column = "2"
                        android:layout_columnWeight = "1"
                        android:layout_row = "3"
                        android:text = "B" />
                </GridLayout>
            </LinearLayout>
        </ScrollView>

    </android.support.constraint.ConstraintLayout>

</RelativeLayout>

Почему вы используете в макете контейнеры только с одним дочерним элементом? Родительский относительный макет можно удалить - он ничего не делает. LinearLayout внутри ScrollView - тоже.

Andrei Vinogradov 18.10.2018 17:16

ваш макет необходимо переработать для оптимизации, для вашей проблемы я думаю, что ImageView с id @ + id / fretmarker является источником проблемы, он может перекрывать кнопку или потреблять щелчок ... вам нужно добавить его противопоказания

Anis BEN NSIR 18.10.2018 17:18

@AndreiVinogradov Удаление относительного макета исправило это. Если вы добавите свой комментарий в качестве ответа, я приму его как правильный.

james 18.10.2018 17:20

@AnisBENNSIR Это изображение перемещается программно, поэтому ограничения не требуются.

james 18.10.2018 17:21

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

Anis BEN NSIR 18.10.2018 17:23

добавьте android:descendantFocusability = "afterDescendants" в макет сетки, и это, вероятно, сработает. что-то «ворует» ваше событие клика.

Shark 18.10.2018 17:26
1
6
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Сначала попробуйте упростить свой макет. Внутри ScrollView нет обязательных контейнеров, таких как основной RelativeLayout и LinearLayout. Упрощение этого вопроса улучшит производительность, читаемость и может снизить вероятность ошибки.

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