onClick не работает на LinearLayout с дочерним Switch - PullRequest
0 голосов
/ 15 января 2020

У меня есть пользовательский LinearLayout с виджетом Switch и TextView child. Я хотел бы иметь возможность щелкнуть область, покрытую LinearLayout, поэтому я установил clickable=true на LinearLayout, но Switch не срабатывает.

Я хотел включить Switch когда я нажимаю на LinearLayout. Я также пробовал с android:duplicateParentState="true" в Switch, но не сработало.

Могу ли я добиться этого с XML?

 <LinearLayout
    android:background="@drawable/ripple"
    android:clickable="true"
    android:focusable="true"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Switch
        android:clickable="false"
        android:paddingTop="8dp"
        android:text="Visibility"
        android:textSize="16sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:clickable="false"
        android:layout_marginRight="58dp"
        android:maxLines="3"
        android:text="@string/visibility_desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="58dp" />

</LinearLayout>

Ответы [ 3 ]

1 голос
/ 15 января 2020

Установите Id вашего linearlayout и Switch , и когда вы выполняете щелчок мышью на Linearlayout, вы должны захотеть выполнить проверку Switch.

linearLayout.setOnClickListener
{
   onClick()
   {
      Switch.setChecked(true);}
   }
}
0 голосов
/ 15 января 2020

Вы можете попробовать следующий код для достижения через xml -

<LinearLayout
android:background="@drawable/ripple"
android:clickable="true"
android:focusable="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Switch
    android:paddingTop="8dp"
    android:text="Visibility"
    android:textSize="16sp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<TextView
    android:clickable="false"
    android:layout_marginRight="58dp"
    android:maxLines="3"
    android:text="@string/visibility_desc"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginEnd="58dp" />

</LinearLayout>
0 голосов
/ 15 января 2020

Вы можете попробовать следующий код для получения требуемого вывода

<LinearLayout
    android:id="@+id/lnrLayout"
    android:background="@drawable/ripple"
    android:clickable="true"
    android:focusable="true"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Switch
        android:id="@+id/switch"
        android:clickable="false"
        android:paddingTop="8dp"
        android:text="Visibility"
        android:textSize="16sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:clickable="false"
        android:layout_marginRight="58dp"
        android:maxLines="3"
        android:text="@string/visibility_desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="58dp" />

</LinearLayout>

Затем установите setOnClickListener linearlayout:

 lnrLayout.setOnClickListener{
            switch.performClick()
        }

Или вы можете использовать переключатель с текстом.

 <androidx.appcompat.widget.SwitchCompat
                android:id="@+id/switch1"
                style="@style/tvStyle_poppinsMedium_Small_Black"
                android:text="@string/push_notifications"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...