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?
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).
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>
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
app ändern: layout_anchor, Coordinator nicht verwenden
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>
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.