これは私のアプリではありません。これはgithubにソースを置くノルディックアプリであり、私のマシンでsoutceを実行しようとしています。しかし、私はこのエラーを抱え続けます:
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"/>
誰でもこの問題を解決する方法を教えてもらえますか?
これはサポートデザインライブラリv.23.2.0で発生し始めました
compile 'com.Android.support:design:23.2.0'
私はこれがv23.2.0で始まったことを知っています。これは、以前(v.23.1.2)にアプリが正常に動作していて、更新後に同じエラーが発生し始めたためです。
エラーは簡単です:
ビューの1つは、親のコーディネーターレイアウトに固定されています。ただし、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
および別のビューをアンカーとして使用します(親レイアウトまたは画面の下部に固定されているその他のビュー)。
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>
私の友人が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です
app:layout_anchorを変更し、コーディネーターを使用しない
他のすべては非常に混乱していました
<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>
これは古い質問ですが、私には最良の解決策があります。
使用する Android:layout_gravity="bottom|end"
(あなたに合った値なら何でも)Android名前空間に注意してください
この属性は、親ビューのレイアウトに従ってFABを配置します。アンカーするダミーのFrameLayoutを作成する必要はありません。