【问题标题】:How to create ToggleButton in the xml file?如何在 xml 文件中创建 ToggleButton?
【发布时间】:2015-01-06 15:39:40
【问题描述】:

我创建了一个新的 xml 文件“test.xml”来测试 ToggleButton,所以如果我在图形布局中拖动一个 ToggleButton。布局变得有点暗,但我在图形布局中看不到拖动的 ToggleButton。在 text.xml 中我可以看到它的代码!

拖动后显示此错误:

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

errorLog文件中的错误:

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$3.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$0(DragSource.java:289)
	at org.eclipse.swt.dnd.DragSource$1.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$9.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$5.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>

【问题讨论】:

  • 你查看错误日志中的错误了吗?
  • 我将其添加到问题中。对我来说,这个错误没有什么特别的。
  • 遇到同样的问题 - 尝试使用 CheckBox 或 support-v7 Switch,至少在找到合适的解决方案之前。

标签: android


【解决方案1】:

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

【讨论】:

  • 您的回答对我有用。就我而言,我将自定义形状 drawable.xml 文件设置为按钮的背景。它使用普通的 .png 作为按钮背景编译得很好,但是当我尝试使用 shape.xml 时,它失败了。我的堆栈跟踪的前几行:java.lang.ArrayIndexOutOfBoundsException: -1 at android.view.ShadowPainter.createDropShadow(ShadowPainter.java:116)
  • 只是好奇为什么会这样,我的自定义组件中是否需要做些什么才能让 API21 的这个错误消失?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2013-04-05
    • 2011-04-28
    相关资源
    最近更新 更多