我正在尝试使用android注释创建一个带有FloatingActionButton按钮的Activity,并且我得到一个错误,让它膨胀。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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="com.forkandjoin.jointv.activities.VideoPlayerActivity_">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/lb_ic_hq"
android:backgroundTint="@color/img_soft_opaque"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true" />
</android.support.design.widget.CoordinatorLayout>
@EActivity(R.layout.activity_video_player)
public class VideoPlayerActivity extends AppCompatActivity {
@ViewById VideoView videoView;
@ViewById FloatingActionButton fab;
@AfterViews
void afterViewInjected(){
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myproject.jointv, PID: 11770
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.jointv/com.myproject.jointv.activities.VideoPlayerActivity_}: android.view.InflateException: Binary XML file line #8: Error inflating class android.support.design.widget.FloatingActionButton at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)
....
.... more description....
我真的迷路了,我看不出错误在哪里?
03-16 12:33:25.101 16095-16095/com.myproject.jointv E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myproject.jointv, PID: 16095
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.jointv/com.myproject.jointv.activities.VideoPlayerActivity_}: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.design.widget.FloatingActionButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.design.widget.FloatingActionButton
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.myproject.jointv.activities.VideoPlayerActivity_.setContentView(VideoPlayerActivity_.java:48)
at com.myproject.jointv.activities.VideoPlayerActivity_.onCreate(VideoPlayerActivity_.java:39)
at android.app.Activity.performCreate(Activity.java:6500)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:614)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.myproject.jointv.activities.VideoPlayerActivity_.setContentView(VideoPlayerActivity_.java:48)
at com.myproject.jointv.activities.VideoPlayerActivity_.onCreate(VideoPlayerActivity_.java:39)
at android.app.Activity.performCreate(Activity.java:6500)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:961)
at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1007)
at android.graphics.drawable.RippleDrawable$RippleState.<init>(RippleDrawable.java:932)
at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:923)
at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:94)
at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:912)
at android.graphics.drawable.RippleDrawable.mutate(RippleDrawable.java:909)
at android.view.View.applyBackgroundTint(View.java:17686)
at android.view.View.setBackgroundDrawable(View.java:17555)
at android.support.v7.widget.AppCompatImageButton.setBackgroundDrawable(AppCompatImageButton.java:84)
at android.support.design.widget.FloatingActionButton.access$501(FloatingActionButton.java:58)
at android.support.design.widget.FloatingActionButton$ShadowDelegateImpl.setBackgroundDrawable(FloatingActionButton.java:671)
at android.support.design.widget.FloatingActionButtonLollipop.setBackgroundDrawable(FloatingActionButtonLollipop.java:75)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:131)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:105)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:614)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
at com.myproject.jointv.activities.VideoPlayerActivity_.setContentView(VideoPlayerActivity_.java:48)
at com.myproject.jointv.activities.VideoPlayerActivity_.onCreate(VideoPlayerActivity_.java:39)
at android.app.Activity.performCreate(Activity.java:6500)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
答案 0 :(得分:0)
您正在将颜色设置为backgroundTint
,而它似乎只适用于drawable。当我使用itemIconTint
导航菜单时,至少我遇到了这个问题。
尝试创建可绘制资源:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/img_soft_opaque" />
</selector>
然后:
android:backgroundTint="@drawable/your_selector"
尝试使用颜色资源(在资源中创建color
文件夹)的另一个选项。在这种情况下,您将引用如下文件:
android:backgroundTint="@color/your_selector"
很抱歉我的回答可能令人困惑,我真的不确定使用颜色有什么问题:)我只记得我有这个问题。
修改强>
验证了色彩资源的解决方案。忽略我关于使用可绘制资源的建议。感谢。
编辑2
来自文档:
android:backgroundTint setBackgroundTintList(ColorStateList) Tint to apply to the background.
尝试设置如下颜色状态列表:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="@color/img_soft_opaque" />
</selector>
答案 1 :(得分:0)
您只需将其与自定义 app 命名空间一起使用即可。它与颜色代码以及ColorStateLists
完美配合xmlns:app="http://schemas.android.com/apk/res-auto"
app:backgroundTint="@color/img_soft_opaque"