0

I want to be able to perform onClickListner on root RelativeLayout called "rl". Not it does not work I suspect it can be because of MotionLayout as a children. How to solve that?

Here is what I have done so far, my code.

ShowNoteActivity.java

(...)

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        (...)

        RelativeLayout rl = findViewById(R.id.rl);
        rl.setOnClickListener(view -> {
            Toast.makeText(this, "abc", Toast.LENGTH_SHORT).show();
        });
}

show_note_activity.xml

<?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"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="true">

    <pl.jawegiel.simplenotepad.CustomMotionLayout
        android:id="@+id/motion_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:focusable="false"
        app:layoutDescription="@xml/show_note_activity_scene">


        <TextView
            android:id="@+id/note_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:clickable="false"
            android:duplicateParentState="true"
            android:focusable="false"
            android:gravity="center"
            android:text="@string/note_title"
            android:textColor="?attr/myTextColor"
            android:textSize="18sp"
            android:textStyle="bold"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/note_title_value"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView3"
            android:clickable="false"
            android:duplicateParentState="true"
            android:focusable="false"
            android:gravity="top|left"
            android:hint="@string/enter_title"
            android:lines="2"
            android:maxLines="10"
            android:minHeight="48dp"
            android:textColor="?attr/myTextColor"
            android:textColorHint="?attr/myHintTextColor"
            android:textSize="18sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toBottomOf="@id/note_title" />


        <TextView
            android:id="@+id/note_desc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/note_title_value"
            android:layout_marginTop="10dp"
            android:clickable="false"
            android:duplicateParentState="true"
            android:focusable="false"
            android:gravity="center"
            android:text="@string/note_desc"
            android:textColor="?attr/myTextColor"
            android:textSize="18sp"
            android:textStyle="bold"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/note_title_value" />

        <androidx.core.widget.NestedScrollView
            android:id="@+id/nestedScrollView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:focusable="false"
            app:layout_constraintTop_toBottomOf="@id/note_desc">

            <RelativeLayout
                android:id="@+id/rl2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clickable="false"
                android:focusable="false">

                <TextView
                    android:id="@+id/note_desc_value"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:clickable="false"
                    android:focusable="false"
                    android:textColor="?attr/myTextColor"
                    android:textColorHint="?attr/myHintTextColor"
                    android:textSize="18sp" />

            </RelativeLayout>
        </androidx.core.widget.NestedScrollView>
    </pl.jawegiel.simplenotepad.CustomMotionLayout>
</RelativeLayout>

CustomMotionLayout.java

public class CustomMotionLayout extends MotionLayout {

public CustomMotionLayout(Context context) {
    super(context);
}

public CustomMotionLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomMotionLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        return super.onInterceptTouchEvent(event);
    }
    return false;
}
}

show_note_activity_scene.xml

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@id/note_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
        <Constraint
            android:id="@id/note_title_value"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toBottomOf="@id/note_title"/>
        <Constraint
            android:id="@id/note_desc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/note_title_value"/>

    </ConstraintSet>



    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@id/note_title"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:alpha="0.0"/>
        <Constraint
            android:id="@id/note_title_value"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:alpha="0.0"/>
        <Constraint
            android:id="@id/note_desc"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:alpha="0.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    </ConstraintSet>
    <Transition
        app:constraintSetEnd="@id/end"
        app:constraintSetStart="@id/start"
        app:duration="1000">
        <OnSwipe
            app:touchAnchorSide="top"
            app:dragDirection="dragUp"
            app:moveWhenScrollAtTop="true"
            app:touchAnchorId="@id/nestedScrollView"/>
        <KeyFrameSet>
        </KeyFrameSet>
    </Transition>
</MotionScene>
Qbi
  • 445
  • 4
  • 13

1 Answers1

0

If you want to click on parent you should disable motionlayout transition and do your transition programmatically with one button or ... Disable motion layout:

motionLayout.getTransition(R.id.yourTransition).setEnable(false)

If you must to use onSwipe in your project you can disable transition after collapsing motionlayout and return layout to top programmatically and when expand enable motionlayout transition.

sajadab
  • 383
  • 2
  • 11