14

đây không phải là ứng dụng của tôi, đây là ứng dụng nordic đặt nguồn của nó trên github và tôi đang cố gắng chạy soutce trên máy của tôi. nhưng tôi tiếp tục có lỗi này:Xem không thể được neo vào phụ huynh 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) 

một đây là cách bố trí của MainActivity tôi:

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

và đây là mã màn hình Spash tôi:

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 
    } 

} 

và đây là cách bố trí của màn hình giật gân của tôi:

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

ai cũng có thể cho tôi biết cách giải quyết vấn đề này?

Trả lời

31

này bắt đầu xảy ra trong hỗ trợ thư viện thiết kế v.23.2.0

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

Tôi biết điều này bắt đầu với v23.2.0 vì ứng dụng của tôi đã làm việc tốt trước (v.23.1.2) và bắt đầu trình bày cùng một thất bại sau khi cập nhật.

Lỗi đơn giản:

Một trong các chế độ xem của bạn được neo vào Bố cục phối hợp mẹ. Tuy nhiên, bắt đầu từ phiên bản 23..2.0, điều này không còn được cho phép nữa.

Tôi nghĩ rằng lỗi là ở FAB của bạn:

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

Tôi tin rằng id/container là một phụ huynh CoordinatorLayout

Sửa

cách phải được thay đổi layout_anchor và sử dụng một cái nhìn như anchor (bố cục cha mẹ hoặc bất kỳ chế độ xem nào khác được cố định ở cuối màn hình).

+0

cảm ơn bạn.vấn đề được giải quyết. – farzaneh

1

thay đổi ứng dụng: layout_anchor, không sử dụng Coodinator

4

Quan điểm mà FAB được neo phải một cái nhìn hậu duệ của CoordinatorLayout.

Và nếu chế độ xem là bố cục, FAB không được nằm trong bố cục, nếu không cài đặt trọng lực neo sẽ không hoạt động. Ví dụ:

<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

Câu trả lời có thể được cải thiện bằng cách cung cấp mã giải thích cách câu trả lời đạt được. – MikeT

+0

Nó thêm một bố cục con có tên 'attachment_layout', với cùng cấp độ cho' fab', vì vậy 'fab' có thể layout_anchor của' attachment_layout' – yanzi1225627

1

Có một cách khác mà bạn tôi đã học hôm nay bằng cách sử dụng tab Thiết kế trong Studio. Tôi đã kéo FAB của mình để neo và tìm ra mã này -

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

Lưu ý rằng điều này hoạt động hoàn hảo như tôi đang sử dụng Công cụ thu gọn Thanh công cụ. Tôi thậm chí đã cố gắng thiết lập chiều rộng khác nhau và làm việc tốt của nó.

Ngoài ra, tính năng này còn hoạt động trong bất kỳ phiên bản thư viện hỗ trợ nào. Mine là 25.0.0

Các vấn đề liên quan