如何在 xml 文件中创建 ToggleButton?

How to create ToggleButton in the xml file?

我创建了一个新的 xml 文件 "test.xml" 用于测试 ToggleButton,因此如果我在图形布局中拖动 ToggleButton。布局变得有点暗,但我在图形布局中看不到拖动的 ToggleButton。在text.xml我可以看到代码啦!

拖动后显示此错误:

Exception raised during rendering: -1
Exception details are logged in Window > Show View > Error Log

错误日志文件中的错误:

java.lang.ArrayIndexOutOfBoundsException: -1
 at android.view.ShadowPainter.createDropShadow(ShadowPainter.java:116)
 at android.view.ShadowPainter.createDropShadow(ShadowPainter.java:48)
 at android.view.ViewGroup_Delegate.getPathShadow(ViewGroup_Delegate.java:140)
 at android.view.ViewGroup_Delegate.drawShadow(ViewGroup_Delegate.java:77)
 at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)
 at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
 at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
 at android.view.View.draw(View.java:15017)
 at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3404)
 at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
 at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
 at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
 at android.view.View.draw(View.java:15017)
 at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3404)
 at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
 at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
 at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
 at android.view.View.draw(View.java:15117)
 at android.view.View.draw(View.java:15022)
 at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3404)
 at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
 at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
 at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
 at android.view.View.draw(View.java:15117)
 at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:587)
 at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:334)
 at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:517)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1584)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1309)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.onXmlModelChanged(GraphicalEditorPart.java:1267)
 at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegateXmlModelChanged(LayoutEditorDelegate.java:402)
 at com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.xmlModelChanged(CommonXmlEditor.java:329)
 at com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor$XmlModelStateListener.modelChanged(AndroidXmlEditor.java:1653)
 at com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.wrapEditXmlModel(AndroidXmlEditor.java:1114)
 at com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.wrapUndoEditXmlModel(AndroidXmlEditor.java:1190)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.MoveGesture.drop(MoveGesture.java:396)
 at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GestureManager$CanvasDropListener.drop(GestureManager.java:679)
 at org.eclipse.swt.dnd.DNDListener.handleEvent(DNDListener.java:91)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
 at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1085)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1070)
 at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:782)
 at org.eclipse.swt.dnd.DropTarget.Drop(DropTarget.java:456)
 at org.eclipse.swt.dnd.DropTarget.Drop_64(DropTarget.java:392)
 at org.eclipse.swt.dnd.DropTarget.method6(DropTarget.java:260)
 at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:119)
 at org.eclipse.swt.internal.ole.win32.COM.DoDragDrop(Native Method)
 at org.eclipse.swt.dnd.DragSource.drag(DragSource.java:363)
 at org.eclipse.swt.dnd.DragSource.access[=12=](DragSource.java:289)
 at org.eclipse.swt.dnd.DragSource.handleEvent(DragSource.java:172)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
 at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
 at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1151)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
 at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
 at org.eclipse.ui.internal.Workbench.run(Workbench.java:636)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
 at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
 at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:606)
 at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
 at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
 at org.eclipse.equinox.launcher.Main.run(Main.java:1465)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ToggleButton
        android:id="@+id/toggleButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ToggleButton" />
    
</LinearLayout>

它对我有用。此外,android:text 不是 ToggleButton 的有效属性。使用 android:textOnandroid:textOff 设置按钮状态的文本。

我的解决方案是在图形布局中切换 API。我从 API 21 切换到 API 19.