farzaneh farzaneh - 9 months ago 69
Android Question

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?

Answer Source

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).