android studio app在设置渐变背景时崩溃

时间:2017-12-30 14:46:57

标签: android xml

当我设置渐变背景时,我的应用程序立即崩溃,如果我没有这样做,那么一切正常。

我的activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient_background"
    tools:context="com.example.uytkownik.myapplication.MainActivity">

    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</RelativeLayout>

gradient_background.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="@color/gradientColBeg"
                android:endColor="@color/gradientColEnd"
                android:angle="90"/>
        </shape>
    </item>
</selector>

colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#000000</color>
    <color name="gradientColBeg">#FFF</color>
    <color name="gradientColEnd">#000</color>
</resources>

堆栈跟踪:

12/30 15:39:05: Launching app
$ adb install-multiple -r -t -p com.example.uytkownik.myapplication D:\Projekty\java\nauka\MyApplication\app\build\intermediates\split-apk\debug\slices\slice_0.apk D:\Projekty\java\nauka\MyApplication\app\build\outputs\apk\debug\app-debug.apk 
Split APKs installed
$ adb shell am start -n "com.example.uytkownik.myapplication/com.example.uytkownik.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 16680 on device huawei-huawei_y560_l01-Q6VBBBB5B0520663
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/InstantRun: starting instant run server: is main process
V/HwPolicyFactory: : success to get AllImpl object and return....
V/HwWidgetFactory: : successes to get AllImpl object and return....
E/art: ClassLinker::FindClass not found:Landroid/widget/ViewStub;
E/art: ClassLinker::FindClass not found:Landroid/webkit/ViewStub;
E/art: ClassLinker::FindClass not found:Landroid/app/ViewStub;
W/ResourceType: Failure getting entry for 0x7f020053 (t=1 e=83) (error -75)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.uytkownik.myapplication, PID: 16680
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.uytkownik.myapplication/com.example.uytkownik.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class android.widget.RelativeLayout
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407)
                      at android.app.ActivityThread.access$700(ActivityThread.java:155)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5298)
                      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:911)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
                   Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.widget.RelativeLayout
                      at android.view.LayoutInflater.createView(LayoutInflater.java:633)
                      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
                      at com.android.internal.policy.impl.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:75)
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
                      at android.app.Activity.setContentView(Activity.java:2160)
                      at com.example.uytkownik.myapplication.MainActivity.onCreate(MainActivity.java:17)
                      at android.app.Activity.performCreate(Activity.java:6039)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:155) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5298) 
                      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:911) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
                   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:607)
                      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                      at com.android.internal.policy.impl.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:75) 
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) 
                      at android.app.Activity.setContentView(Activity.java:2160) 
                      at com.example.uytkownik.myapplication.MainActivity.onCreate(MainActivity.java:17) 
                      at android.app.Activity.performCreate(Activity.java:6039) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:155) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5298) 
                      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:911) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
                   Caused by: android.content.res.Resources$NotFoundException: Resource "com.example.uytkownik.myapplication:drawable/gradient_background" (7f020053)  is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f020053 a=-1 r=0x7f020053}
                      at android.content.res.Resources.loadDrawableForCookie(Resources.java:2462)
                      at android.content.res.Resources.loadDrawable(Resources.java:2400)
                      at android.content.res.HwResources.loadDrawable(HwResources.java:609)
                      at android.content.res.TypedArray.getDrawable(TypedArray.java:785)
                      at android.view.View.<init>(View.java:3747)
                      at android.view.ViewGroup.<init>(ViewGroup.java:498)
                      at android.widget.RelativeLayout.<init>(RelativeLayout.java:249)
                      at android.widget.RelativeLayout.<init>(RelativeLayout.java:245)
                      at android.widget.RelativeLayout.<init>(RelativeLayout.java:241)
                      at java.lang.reflect.Constructor.newInstance(Native Method) 
                      at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                      at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                      at com.android.internal.policy.impl.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:75) 
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) 
                      at android.app.Activity.setContentView(Activity.java:2160) 
                      at com.example.uytkownik.myapplication.MainActivity.onCreate(MainActivity.java:17) 
                      at android.app.Activity.performCreate(Activity.java:6039) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:155) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5298) 
                      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:911) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
I/Process: Sending signal. PID: 16680 SIG: 9
Application terminated.

我是android studio的新手,我不知道是什么导致了这个异常。 我非常感谢你的帮助,非常感谢!

2 个答案:

答案 0 :(得分:3)

我已经测试了你的可绘制代码,它的工作正常 你必须确保你没有做以下可能导致应用程序崩溃的事情。

  1. 您没有将 gradient_background 放在 drawable-v21 文件夹中,而不是仅使用 drawable 并在旧版本的设备中运行。

  2. 您不会将主题更改为其他内容并在样式或清单中应用其他内容。

答案 1 :(得分:1)

  一切都好!你必须告诉渐变的类型,否则它会崩溃!

<?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape>
                <gradient
                    android:startColor="@color/gradientColBeg"
                    android:endColor="@color/gradientColEnd"
                    android:angle="90"
                    android:type="linear"
    />
            </shape>
        </item>
    </selector>