如何使 FAB 在 Activity 的 Fragment 中工作,而不是在 AppCompatActivity 中工作
How to make FAB work in Fragment from a Activity and not in AppCompatActivity
我将我的 FAB 放入 Activity 的片段中,但我不断收到此错误:
10-01 21:01:55.238 22031-22031/com.vei.scanandgo E/AndroidRuntime:
FATAL EXCEPTION: main
Process: com.vei.scanandgo, PID: 22031
android.view.InflateException: Binary XML file line #408: Error inflating class android.support.design.widget.FloatingActionButton
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.vei.scanandgo.BaseFragment.storeView(BaseFragment.java:317)
. . .
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
. . .
. ...
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
at android.support.design.widget.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:33)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:159)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:153)
. .
. ..
Gradle 设置为
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
Inflate 由以下人员完成:
View mView = inflater.inflate(getlayoutResId(), container, false);
我唯一没有更改的是 Activity 到 AppCompatActivity,这会影响很多现有代码。
我们有办法让这个 FAB 与 Activity 一起工作吗?
FAB:
<android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@drawable/pichere"
app:backgroundTint="@color/white"
app:borderWidth="0dp" />
谢谢!
如果我做错了设计,请告诉我我还能做些什么来使这个片段与 FAB 一起工作。
Do we have a way to make this FAB work with Activity?
不直接。 android.support.design.widget.FloatingActionButton
需要 AppCompatActivity
和 Theme.AppCompat
.
我在 this library 中有一个与常规 Activity
(或 FragmentActivity
)一起使用的小部件的交叉端口,但它适用于 minSdkVersion
21 或更高,因为它需要 Theme.Material
.
还有其他 FAB 实现,例如 this one,不需要 appcompat-v7
,也不需要 Theme.Material
。
我将我的 FAB 放入 Activity 的片段中,但我不断收到此错误:
10-01 21:01:55.238 22031-22031/com.vei.scanandgo E/AndroidRuntime:
FATAL EXCEPTION: main
Process: com.vei.scanandgo, PID: 22031
android.view.InflateException: Binary XML file line #408: Error inflating class android.support.design.widget.FloatingActionButton
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.vei.scanandgo.BaseFragment.storeView(BaseFragment.java:317)
. . .
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
. . .
. ...
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
at android.support.design.widget.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:33)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:159)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:153)
. .
. ..
Gradle 设置为
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
Inflate 由以下人员完成:
View mView = inflater.inflate(getlayoutResId(), container, false);
我唯一没有更改的是 Activity 到 AppCompatActivity,这会影响很多现有代码。 我们有办法让这个 FAB 与 Activity 一起工作吗?
FAB:
<android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@drawable/pichere"
app:backgroundTint="@color/white"
app:borderWidth="0dp" />
谢谢!
如果我做错了设计,请告诉我我还能做些什么来使这个片段与 FAB 一起工作。
Do we have a way to make this FAB work with Activity?
不直接。 android.support.design.widget.FloatingActionButton
需要 AppCompatActivity
和 Theme.AppCompat
.
我在 this library 中有一个与常规 Activity
(或 FragmentActivity
)一起使用的小部件的交叉端口,但它适用于 minSdkVersion
21 或更高,因为它需要 Theme.Material
.
还有其他 FAB 实现,例如 this one,不需要 appcompat-v7
,也不需要 Theme.Material
。