[英]Android Support Library Floating Action Button exception
I'm experiencing an odd behaviour regarding android.support.design.widget.FloatingActionButton
. 我遇到了有关android.support.design.widget.FloatingActionButton
的奇怪行为。 I have googled around a little but found no mention of this kind of error for this component. 我在Google上搜索了一下,但没有发现此组件的此类错误。
This only happens when I build with android StrictMode
enabled. 仅当我在启用android StrictMode
情况下进行构建时,才会发生这种情况。 I get the following exception: 我得到以下异常:
CoordinatorLayout﹕ Default behavior class android.support.design.widget.FloatingActionButton$a could not be instantiated. Did you forget a default constructor?
java.lang.InstantiationException: can't instantiate class android.support.design.widget.FloatingActionButton$a; no empty constructor
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1130)
at android.support.design.widget.CoordinatorLayout.a(CoordinatorLayout.java:503)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:579)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16831)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16831)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2586)
at android.view.View.measure(View.java:16831)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2189)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1352)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1535)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6364)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
at android.view.Choreographer.doCallbacks(Choreographer.java:591)
at android.view.Choreographer.doFrame(Choreographer.java:561)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeN
This, however does not make my application to crash or throws any visible error. 但是,这不会使我的应用程序崩溃或引发任何可见错误。 It's thrown each time the activity which has the FAB is created, but the FAB renders and works perfectly fine. 每次创建具有FAB的活动时都将引发该异常,但是FAB会呈现并正常运行。 If I click on it, it does what the onClickListener
says it should do. 如果我单击它,它会执行onClickListener
所说的那样。
This is are my Android Support Library dependencies, in my build.gradle
: 这是我在build.gradle
Android支持库依赖build.gradle
:
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'
And this is how I use the FAB in my xml layout: 这就是我在xml布局中使用FAB的方式:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/home_toolbar_wallet"
android:name="my.fragment.class"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
(...)
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/home_floating_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_white_18dp"
android:layout_margin="@dimen/action_button_margin"
app:borderWidth="0dp"
app:layout_anchor="@id/home_toolbar_wallet"
app:layout_anchorGravity="bottom|right|end"/>
In case you are wondering, this is how I enable StrictMode
: 如果您想知道,这就是我启用StrictMode
:
StrictMode.ThreadPolicy.Builder builder = new StrictMode.ThreadPolicy.Builder builder = new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog();
if (Utils.hasHoneycomb()) {
builder.penaltyFlashScreen();
}
StrictMode.setThreadPolicy(builder.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll()
.penaltyLog()
.build());
Anyone has encountered with this? 有人遇到过这个吗?
It could be due to proguard obfuscating your code. 这可能是由于proguard混淆了您的代码。 Have you tried to add this rule to your proguard rules? 您是否尝试过将此规则添加到Proguard规则中?
-keepclassmembers class android.support.design.widget.FloatingActionButton$Behavior { public <init>(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.