Событие onClick не работает в LinearLayout, если отображаются все компоненты и в Android API есть место - PullRequest
0 голосов
/ 02 сентября 2018

Я тестирую свое приложение с Android API 27 с самым большим размером экрана, доступным для эмулируемых устройств.

Если произойдет какое-то условие, мое приложение сможет реагировать, если пользователь нажимает в пустом пространстве (без элемента UI) или пассивном элементе (например, TextView).

Из API 18–26, если после отображения последнего элемента в LinearLayout было оставлено место, если пользователь нажал на него, он соответствующим образом отреагировал, но в API 27 он просто игнорирует его, но работает, если что-то похожее на TextView.

Я пытался решить эту проблему, создав невидимый TextView, который бы заполнил все это свободное пространство, либо поместив его в последний элемент, либо поместив его посередине, но это не работает, я сделал это так 2 способа.

  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:clickable="true">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/linearlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity4"
        android:orientation="vertical"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:clickable="true">
        [moreelements]
         <TextView
        android:id="@+id/textViewextra"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="28dp"
        android:gravity="center"
        android:text=""
        android:layout_weight="1"/>
    </LinearLayout>

    </ScrollView>

и с другой стороны:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:clickable="true">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/linearlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity4"
        android:orientation="vertical"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:clickable="true">
        [moreelements]
         <TextView
        android:id="@+id/textViewextra"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="28dp"
        android:gravity="center"
        android:text=""
        android:layout_weight="1"/>
        [moreelements]
    </LinearLayout>



 </ScrollView>

Но в API 27 он даже не заполняет экран и по-прежнему не реагирует.

Как можно решить эту проблему?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы хотите, чтобы пустое пространство было кликабельным и выполняло какое-то действие?

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

Заполнит пустое пространство, а затем просто установит для него OnClickListener.

...