Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

View can not be anchored to the the parent CoordinatorLayout

this is not my app, this is nordic app that put its source on github and I am trying to run the soutce on my machine. but i keep having this error :

03-07 07:12:13.641  12622-12622/com.noxel.apppaneladmintry2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.noxel.apppaneladmintry2, PID: 12622
java.lang.IllegalStateException: View can not be anchored to the the parent CoordinatorLayout
        at android.support.design.widget.CoordinatorLayout$LayoutParams.resolveAnchorView(CoordinatorLayout.java:2522)
        at android.support.design.widget.CoordinatorLayout$LayoutParams.findAnchorView(CoordinatorLayout.java:2491)
        at android.support.design.widget.CoordinatorLayout.prepareChildren(CoordinatorLayout.java:619)
        at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:670)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
        at android.view.View.measure(View.java:17442)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        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:921)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:716)

an this is the layout of my Mainactivity :

    <?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/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        style="@style/HeaderBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:theme="@style/ActionBarThemeOverlay"
            app:popupTheme="@style/ActionBarPopupThemeOverlay"
            app:titleTextAppearance="@style/ActionBar.TitleText"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabSelectedTextColor="@color/tabSelectedTextColor"
            app:tabTextColor="@color/tabTextColor"
            app:tabIndicatorColor="@color/tabIndicatorColor"
            app:tabGravity="fill"
            app:tabMode="fixed"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/fab_ic_add"
        app:backgroundTint="@color/fab_normal"
        app:layout_anchor="@+id/container"
        app:layout_anchorGravity="bottom|right|end"
        app:elevation="4dp"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/background_title"
        android:layout_gravity="bottom|center"
        android:layout_marginBottom="6dp"/>

</android.support.design.widget.CoordinatorLayout>

and this is my spash screen code:

public class SplashscreenActivity extends Activity {
    /** Splash screen duration time in milliseconds */
    private static final int DELAY = 1000;
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splashscreen);

        // Jump to MainActivity after DELAY milliseconds
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                final Intent intent = new Intent(SplashscreenActivity.this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                intent.putExtra(MainActivity.OPENED_FROM_LAUNCHER, true);
                startActivity(intent);
                finish();
            }
        }, DELAY);
    }

    @Override
    public void onBackPressed() {
        // do nothing. Protect from exiting the application when splash screen is shown
    }

}

and this is layout of my splash screen :

<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SplashscreenActivity" >

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="70dp"
    android:scaleType="center"
    android:src="@drawable/nordic_logo" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/background_title"
    android:layout_gravity="bottom|center"
    android:layout_marginBottom="6dp"/>

can anyone tell me how to solve this issue?

like image 677
farzaneh Avatar asked Mar 07 '16 12:03

farzaneh


2 Answers

This started to happened in support design library v.23.2.0

compile 'com.android.support:design:23.2.0'

I know this started with v23.2.0 because my app was working fine before (v.23.1.2) and started to present same failure after update.

Error is simple:

One of your views is anchored to its parent Coordinator Layout. However, starting at v.23.2.0, this is no longer allowed.

I think the error is in your FAB:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab_add"
    ...
    app:layout_anchor="@+id/container" 
    ... />

I believe that id/container is a parent CoordinatorLayout

Fixing

Right way is change the layout_anchor and use another view as anchor (parent Layout or any other view which is fixed to bottom of the screen).

like image 172
W0rmH0le Avatar answered Nov 15 '22 21:11

W0rmH0le


The view to which the FAB is anchored must be a descendant view of the CoordinatorLayout.

And if the view is a layout, the FAB must not be inside the layout, otherwise the anchor gravity settings won't work. For example:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/content_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    .
    .
    .
    <FrameLayout
        android:id="@+id/attachment_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/fab_margin_end"
        android:layout_marginTop="@dimen/fab_margin_top"
        android:scaleType="center"
        android:src="@drawable/ic_action_save"
        app:borderWidth="0dp"
        app:elevation="@dimen/fab_elevation"
        app:layout_anchor="@id/attachment_layout"
        app:layout_anchorGravity="top|end"
        app:rippleColor="@color/accent_highlight" />

</android.support.design.widget.CoordinatorLayout>
like image 32
Jon Avatar answered Nov 15 '22 21:11

Jon