我试图用动画制作一个切换按钮,我使用一个切换按钮和4个XML来做到这一点:
这是我的主要活动,其中包含切换按钮:

<ToggleButton
    android:id="@+id/toggle"
    android:layout_width="144dp"
    android:layout_height="144dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@drawable/btn_toggle_bg"
    android:checked="true"
    android:onClick="OnPressToggle" />


这是我的btn_toggle_bg。具有背景值的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background" android:drawable="@android:color/transparent" />
<item android:id="@+android:id/toggle" android:drawable="@drawable/btn_toggle" />
</layer-list>
</LinearLayout>


这是我的btn_toggle。 xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"  android:drawable="@drawable/btn_switch_on" />
<item android:state_checked="false"  android:drawable="@drawable/btn_switch_off" />
</selector>


这是新的原木猫

09-26 03:25:36.856: E/AndroidRuntime(19979): FATAL EXCEPTION: main
09-26 03:25:36.856: E/AndroidRuntime(19979): Process: com.soheil.prolight, PID: 19979
09-26 03:25:36.856: E/AndroidRuntime(19979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.soheil.prolight/com.soheil.prolight.MainActivity}: android.view.InflateException: Binary XML file line #37: Error inflating class android.widget.ToggleButton
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.os.Handler.dispatchMessage(Handler.java:102)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.os.Looper.loop(Looper.java:136)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread.main(ActivityThread.java:5017)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at java.lang.reflect.Method.invokeNative(Native Method)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at java.lang.reflect.Method.invoke(Method.java:515)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at dalvik.system.NativeStart.main(Native Method)
09-26 03:25:36.856: E/AndroidRuntime(19979): Caused by: android.view.InflateException: Binary XML file line #37: Error inflating class android.widget.ToggleButton
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.createView(LayoutInflater.java:620)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.inflate(Native Method)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.Activity.setContentView(Activity.java:1929)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at com.soheil.prolight.MainActivity.onCreate(MainActivity.java:84)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.Activity.performCreate(Activity.java:5231)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
09-26 03:25:36.856: E/AndroidRuntime(19979):    ... 12 more
09-26 03:25:36.856: E/AndroidRuntime(19979): Caused by:   java.lang.reflect.InvocationTargetException
09-26 03:25:36.856: E/AndroidRuntime(19979):    at java.lang.reflect.Constructor.constructNative(Native Method)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.LayoutInflater.createView(LayoutInflater.java:594)
09-26 03:25:36.856: E/AndroidRuntime(19979):    ... 28 more
09-26 03:25:36.856: E/AndroidRuntime(19979): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/btn_toggle_bg.xml from drawable resource ID #0x7f020005
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.content.res.Resources.loadDrawable(Resources.java:2096)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.content.res.XResources$XTypedArray.getDrawable(XResources.java:965)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.view.View.<init>(View.java:3554)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.widget.TextView.<init>(TextView.java:623)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.widget.Button.<init>(Button.java:107)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.widget.CompoundButton.<init>(CompoundButton.java:68)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.widget.ToggleButton.<init>(ToggleButton.java:51)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.widget.ToggleButton.<init>(ToggleButton.java:64)
09-26 03:25:36.856: E/AndroidRuntime(19979):    ... 31 more
09-26 03:25:36.856: E/AndroidRuntime(19979): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag LinearLayout
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
09-26 03:25:36.856: E/AndroidRuntime(19979):    at android.content.res.Resources.loadDrawable(Resources.java:2092)
09-26 03:25:36.856: E/AndroidRuntime(19979):    ... 39 more

最佳答案

可绘制名称不能以数字开头:

将它们全部重命名为,例如:

<item android:drawable="@drawable/d1" android:duration="50"/>
<item android:drawable="@drawable/d2" android:duration="50"/>
...


这是您应遵循的命名规则:


需要以字母开头而不是数字开头
不能包含大写字母
不能包含字母和数字以外的任何内容

关于android - 动画切换按钮错误膨胀了类android.widget.ToggleButton,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26049742/

10-11 22:35