I am trying to create a similar layout for User Profile screen in my app. Here is what I need: 1. The back, plus and image button should be in the toolbar in collapsed as well as expanded state. 2. The toolbar should be transparent in expanded state and change to color of content scrim on being collapsed. 3. Served(180) and Cooked(300) text should be clickable and lead to other activities. 4. On collapsing, the tabLayout should be pinned below toolbar. 5. ViewPager attached to tabs should work fine and it contains listview.
Here is my attempt:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#231f20"
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:background="#231f20"
app:layout_anchor="@+id/appbar"
app:layout_anchorGravity="bottom"
app:tabGravity="fill"
app:tabMode="fixed" />
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="#FAC80A"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleMarginStart="200dp"
app:expandedTitleMarginBottom="110dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax">
// Contains the background image, profile pic,textview etc.
</RelativeLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
Problem : Clicking anywhere on Collapsing toolbar's contents(inside the relative layout) in the beginning does not cause any problem but as soon as I do some scrolling(collapsing the toolbar, scrolling viewpager contents, changing tabs) and again come back to collapsing toolbar in expanded state, and click anywhere on it, the app crashes. I am getting the following error:
09-21 07:28:38.740 5462-5462/com.galleri5.android E/InputEventReceiver﹕ Exception dispatching input event.
09-21 07:28:38.741 5462-5462/com.galleri5.android E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
09-21 07:28:38.744 5462-5462/com.galleri5.android E/MessageQueue-JNI﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.MotionEvent.getX()' on a null object reference
at android.view.View.onTouchEvent(View.java:9321)
at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
at android.view.View.dispatchTouchEvent(View.java:8388)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2569)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1743)
at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2530)
at android.view.View.dispatchPointerEvent(View.java:8578)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4028)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3894)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3585)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5708)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5682)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5653)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5798)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:122)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
09-21 07:28:38.747 5462-5462/com.galleri5.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.galleri5.android, PID: 5462
java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.MotionEvent.getX()' on a null object reference
at android.view.View.onTouchEvent(View.java:9321)
at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
at android.view.View.dispatchTouchEvent(View.java:8388)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2569)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1743)
at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2530)
at android.view.View.dispatchPointerEvent(View.java:8578)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4028)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3894)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3585)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5708)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5682)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5653)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5798)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:122)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
What is the reason of this behavior and how do I rectify this.
This was an issue of
android support library
.see this link for details CoordinatorLayout NullPointerException in onTouchEvent
According to above link this issue has been fixed in
android support library version-23.0.1
Update your android support library to solve error.