ce n'est pas mon application, c'est une application nordique qui a mis sa source sur github et j'essaie d'exécuter le soutce sur ma machine. mais je continue à avoir cette erreur:
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)
voici la structure de mon activité principale:
<?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>
et ceci est mon code d'écran spash:
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
}
}
et ceci est la mise en page de mon écran de démarrage:
<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"/>
quelqu'un peut-il me dire comment résoudre ce problème?
Cela a commencé à se produire dans la bibliothèque de conception de support v.23.2.0
compile 'com.Android.support:design:23.2.0'
Je sais que cela a commencé avec v23.2.0 car mon application fonctionnait bien avant (v.23.1.2) et a commencé à présenter le même échec après la mise à jour.
L'erreur est simple:
L'un de vos points de vue est ancré dans la disposition de son coordinateur parent. Cependant, à partir de v.23.2.0, cela n'est plus autorisé.
Je pense que l'erreur est dans votre FAB:
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab_add"
...
app:layout_anchor="@+id/container"
... />
Je crois que id/container
est un parent CoordinatorLayout
Fixation
La bonne façon est de changer le layout_anchor
et d’utiliser une autre vue comme ancre (Layout parent ou toute autre vue fixée au bas de l’écran).
La vue à laquelle la FAB est ancrée doit être une vue descendante de CoordinatorLayout.
Et si la vue est une mise en page, le FAB ne doit pas être à l'intérieur de la mise en page, sinon les paramètres de gravité d'ancrage ne fonctionneront pas. Par exemple:
<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>
Il existe un autre moyen que mon ami a appris aujourd'hui en utilisant l'onglet Design de Studio. J'ai traîné mon FAB pour jeter l'ancre et découvrir ce code -
<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" />
Notez que cela fonctionne parfaitement car j'utilise Collapsing Toolbar. J'ai même essayé de régler des largeurs différentes et que cela fonctionne bien.
En outre, il fonctionne dans n’importe quelle version de la bibliothèque de support. Le mien est 25.0.0
changer d'application: layout_anchor, ne pas utiliser le coordinateur