Представление, ограниченное снаружи ConstraintLayout, не получает сенсорные события - PullRequest
0 голосов
/ 21 марта 2020

У меня есть представление изображения, которое ограничено за пределами его родительского ConstraintLayout с clipChildren, установленным в false на родительском макете.

Проблема заключается в том, что изображение вне макета ограничения не получает никаких события касания (см. код ниже для воспроизведения).

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

Есть ли способ Я могу заставить это работать?

Я использую ConstraintLayout v1.1.3

Problem demonstration

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        image.setOnClickListener {
            it.background = getDrawable(R.color.colorPrimaryDark)
        }
    }
}

content_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
    android:clipChildren="false">

    <androidx.constraintlayout.widget.ConstraintLayout
        app:layout_constraintTop_toTopOf="parent"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_marginBottom="400dp"
        android:background="@color/colorPrimary">

        <ImageView
            android:id="@+id/image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="parent"
            android:clickable="true"
            android:background="@color/colorAccent"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

1 Ответ

0 голосов
/ 21 марта 2020

Ну, вместо ImageView, хорошим вариантом здесь будет использование ImageButton. Вы можете легко инициализировать его и установить прослушиватель при нажатии:

ImageButton img = (ImageButton)findViewbyId(R.id.image)
// This is java code.

И затем установить OnClickListener.

Редактировать: - Хорошо, я понял вашу точку зрения. Основным фактом является то, что отрицательные поля НЕ принимаются в макете ограничения. Вот почему он не получает сенсорные события. Вы должны ограничить это по-другому.

...