wake-up-neo.com

Die Ansicht kann nicht mit dem übergeordneten CoordinatorLayout verankert werden

dies ist nicht meine App, dies ist die nordische App, die ihre Quelle auf github gesetzt hat, und ich versuche, die Soutce auf meinem Computer auszuführen. aber ich habe immer diesen fehler:

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)

und dies ist das Layout meiner Hauptaktivität:

    <?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>

und das ist mein 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
    }

}

und dies ist das Layout meines Begrüßungsbildschirms:

<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"/>

kann mir jemand sagen, wie ich dieses Problem lösen kann?

17
farzaneh

Dies begann in der Support Design Library V.23.2.0 

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

Ich weiß, dass dies mit Version 23.2.0 begann, da meine App vor (Version 23.1.2) einwandfrei funktionierte und nach dem Update derselbe Fehler auftrat.

Fehler ist einfach: 

Eine Ihrer Ansichten ist im übergeordneten Koordinatorlayout verankert. Ab Version 23.2.0 ist dies jedoch nicht mehr zulässig.

Ich denke, der Fehler liegt in Ihrem FAB:

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

Ich glaube, dass id/container ein übergeordnetes CoordinatorLayout ist

Befestigung

Richtig ist, layout_anchor zu ändern und eine andere Ansicht als Anker zu verwenden (übergeordnetes Layout oder eine andere Ansicht, die am unteren Bildschirmrand fixiert ist).

36
W0rmH0le

Die Ansicht, in der das FAB verankert ist, muss eine Nachkommenansicht des CoordinatorLayout sein.

Wenn es sich bei der Ansicht um ein Layout handelt, darf sich das FAB nicht innerhalb des Layouts befinden. Andernfalls funktionieren die Ankerschwerkrafteinstellungen nicht. Zum Beispiel:

<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>
4
Jon

Es gibt einen anderen Weg, den mein Freund heute über die Registerkarte Design in Studio gelernt hat. Ich habe meine FAB zum Ankern gezogen und finde diesen Code heraus -

<Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        Android:layout_height="wrap_content"
        Android:layout_width="wrap_content"
        Android:layout_margin="@dimen/activity_horizontal_margin"
        Android:src="@drawable/ic_add"
        Android:layout_gravity="center_vertical|center_horizontal"
        app:layout_anchor="@+id/appBar"
        app:layout_anchorGravity="bottom|right" />

Beachten Sie, dass dies perfekt funktioniert, da ich die Collapsing Toolbar verwende. Ich habe sogar versucht, eine andere Breite einzustellen und es funktioniert gut.

Es funktioniert auch in jeder Version der Support-Bibliothek. Mein ist 25.0.0

2
Saksham Khurana

app ändern: layout_anchor, Coordinator nicht verwenden

1
xushao

Alle anderen waren sehr verwirrend

  <Android.support.design.widget.CoordinatorLayout
        Android:id="@+id/coordinatorLayout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <FrameLayout
            Android:id="@+id/contentFrame"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"/>

        <Android.support.design.widget.FloatingActionButton
            Android:id="@+id/fab_add_notes"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_margin="@dimen/fab_margin"
            Android:src="@drawable/ic_add"
            app:fabSize="normal"
            app:layout_anchor="@id/contentFrame"
            app:layout_anchorGravity="bottom|right|end"/>
    </Android.support.design.widget.CoordinatorLayout>
0

Dies ist eine alte Frage, aber ich habe die beste Lösung.

Verwenden Android:layout_gravity="bottom|end" (welcher Wert auch immer zu Ihnen passt) Beachten Sie den Namespace Android

Dieses Attribut positioniert das FAB gemäß dem Layout der übergeordneten Ansicht. Es ist nicht erforderlich, ein Dummy-FrameLayout zu erstellen, auf dem verankert werden kann.

0
Crazo7924