14

これは私のアプリではありません、これはソースをgithubに入れて、自分のマシン上でsoutceを実行しようとしている北欧アプリです。しかし、私はこのエラーを持つ保つ:Viewを親に固定することはできませんCoordinatorLayout

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) 

これは私の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> 

と、これは私の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 
    } 

} 

と、これはのレイアウトであります私のスプラッシュ画面:

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

誰でもこの問題を解決する方法を教えてもらえますか?

答えて

31

これは、サポート設計ライブラリで起き始めたv.23.2.0

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

私はこれが私のアプリは(v.23.1.2)の前に罰金働いていたのでv23.2.0で開始し、提示するために始めた知っています更新後も同じ障害。

エラーは単純です:

あなたの意見の一つは、その親コーディネーターレイアウトに固定されています。ただし、v.23.2.0からは、これはもう許可されていません。私は、エラーがあなたのFABであると思い

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

私はid/container

正しい方法を修正する親CoordinatorLayout

であると信じているがlayout_anchorを変更して別のビューを使用していますアンカー(親レイアウトまたは画面の下部に固定されている他のビュー)。

+0

ありがとうございます。問題が解決しました。 – farzaneh

1

変化アプリ:layout_anchorは、コーディネーター

4

FABはCoordinatorLayoutの子孫図でなければならない係留されたビューを使用しません。

ビューがレイアウトの場合、FABはレイアウト内にあってはいけません。そうしないと、アンカー重力設定が機能しません。たとえば:

<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> 
+0

答えがどのように達成されたかを説明するコードを提供することで、回答を改善することができます。 – MikeT

+0

'fab'と同じレベルの' attachment_layout'という名前の子レイアウトを追加するので、 'fab'は' attachment_layout'のlayout_anchorを実行できます – yanzi1225627

1

私はStudioの[デザイン]タブを使用して、今日学んだ別の方法私の友人があります。私はこのコードを固定して見つけるために私のFABをドラッグ -

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

私は折りたたみツールバーを使用していて、これは完璧に動作していることに注意してください。私は異なった幅とその良い働きを設定しようとしています。

また、サポートライブラリのどのバージョンでも動作しています。鉱山は25.0.0

関連する問題