LibGDX使用Holo皮肤实例化SelectBox提示无default样式如何解决
问题根因
你实例化SelectBox时没有传入已加载的皮肤实例。观察你的代码可以发现,textButton、label等控件都显式指定了skin = manager.skin参数,但selectBox没有传递该参数,此时KTX Scene2D DSL会尝试读取全局默认皮肤,你没有配置全局默认皮肤的情况下就会抛出找不到default样式的错误。
解决方法
给selectBox补充皮肤参数即可:
selectBox<String>(skin = manager.skin) { // 原有逻辑不变 setItems( "1920x1080", "1792x1008", "1664x936", "1536x864", "1408x792", "1280x720", "1152x648", "1024x576" ) }
对你的两个问题的解答
- 皮肤JSON不存在问题。你通过调试器已经确认
SelectBox的样式成功加载,且其他控件都能正常读取同皮肤的对应样式,说明LibGDX的宽松JSON解析器完全兼容该皮肤的格式,报错和JSON本身无关。 - 你可以通过以下方式获取皮肤解析相关的日志用于排查:
- 首先开启LibGDX的Debug级别日志:在应用初始化阶段添加代码
Gdx.app.setLogLevel(Application.LOG_DEBUG) - 皮肤加载完成后,可以手动遍历打印所有已注册的样式验证加载结果,示例代码:
manager.skin.getAll(SelectBox.SelectBoxStyle::class.java).keys.forEach { styleName -> Gdx.app.debug("SkinDebug", "已注册SelectBox样式:$styleName") }
- 如果需要更底层的解析日志,可以自定义
Json序列化监听器传入Skin的构造方法,打印每个样式的解析过程。
补充说明
你更换其他皮肤也出现相同报错的原因和皮肤本身无关,核心问题始终是selectBox没有指定皮肤实例,补全参数后即可正常运行。如果你不想每次都显式传skin参数,可以在初始化KTX Scene2D DSL时配置全局默认皮肤。
内容的提问来源于stack exchange,提问作者UncleBob
相关产品推荐
相关产品推荐

