그래서 "java.lang.RuntimeException :이 그래프에는 순환 종속성이 포함되어 있습니다"오류가 계속 발생합니다. 내가 AppBarLayout.ScrollingViewBehavior에서 확장 한 Behavior에 의해. 이 동작을 사용하는 AppBarLayout이있는 레이아웃이 있으며이 동작을 제거하면 오류가 사라집니다. 다음은 오류 및 코드 내가 FloatingActionButton과 같은 문제가 있었다AppBarLayout ScrollingViewBehavior는 "java.lang.RuntimeException :이 그래프는 순환 종속성을 포함합니다"오류
E/AndroidRuntime: FATAL EXCEPTION: main
Process: yu.heetae.android.mergingtoolbar, PID: 26027
java.lang.RuntimeException: This graph contains cyclic dependencies
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:164)
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:172)
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:172)
at android.support.design.widget.DirectedAcyclicGraph.getSortedList(DirectedAcyclicGraph.java:152)
at android.support.design.widget.CoordinatorLayout.prepareChildren(CoordinatorLayout.java:658)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:706)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18794)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
public class MergedAppbarBehavior extends AppBarLayout.ScrollingViewBehavior {
private Toolbar mToolbar;
private View mBackground;
private FrameLayout.LayoutParams mBackgroundLayoutParams;
private Context mContext;
private boolean isInit = false;
public MergedAppbarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
return dependency instanceof NestedScrollView;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
if(!isInit) {
init(child);
return false;
}
if(isDependencyYBelowToolbar(child, dependency) && ! isDependencyYReachTop(dependency)) {
setToolbarBackground(android.R.color.transparent);
setPartialBackgroundHeight((int)((child.getHeight() + child.getY()) - dependency.getY()));
} else if(isDependencyYBelowStatusToolbar(child, dependency) || isDependencyYReachTop(dependency)) {
setToolbarBackground(Color.parseColor("#3F51B5"));
setPartialBackgroundHeight(0);
}
return false;
}
private void init(View child) {
AppBarLayout appBarLayout = (AppBarLayout) child;
mToolbar = (Toolbar) appBarLayout.findViewById(R.id.toolbar);
mToolbar.setTitle(" ");
mBackground = appBarLayout.findViewById(R.id.background_view);
mBackgroundLayoutParams = (FrameLayout.LayoutParams) mBackground.getLayoutParams();
setToolbarBackground(android.R.color.transparent);
setPartialBackgroundHeight(0);
isInit = true;
}
private boolean isDependencyYBelowToolbar(View child, View dependency){
return dependency.getY() <= child.getY() + child.getHeight() && dependency.getY() > child.getY();
}
private boolean isDependencyYBelowStatusToolbar(View child, View dependency){
return dependency.getY() <= child.getY();
}
private boolean isDependencyYReachTop(View dependency){
return dependency.getY() == 0;
}
private void setPartialBackgroundHeight(int height){
mBackgroundLayoutParams.height = height;
mBackground.setLayoutParams(mBackgroundLayoutParams);
}
private void setToolbarBackground(int color) {
mToolbar.setBackgroundColor(ContextCompat.getColor(mContext, color));
}
}
당신은 그것을 알아 냈습니까? – Anton
아니요, 해결책이나 오류에 대해 찾지 못했습니다. 결국 레이아웃을 재구성하고 CoordinatorLayout.Behavior <>를 사용하여 종료했습니다. – user1840378