本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
Skins
Skin 定义了所有组件的结构性视觉标识:形状(圆角)、边框粗细、间距、阴影和默认图标。内置了三种:
MaterialSkin、IOSSkin 和 FlutterSkin。
Skin ≠ 颜色。 Skin = 结构/渲染器;而调色板(明/暗、primary/surface…)来自
ColorScheme/ThemeMode。自定义 skin 改变的是形状/间距,而非颜色。
默认 Skin
Skin.get() 默认返回 MaterialSkin — 或在 iOS 上自动返回 IOSSkin。
完整示例(复制、粘贴并运行)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*; // Styles
import dev.crossfly.ui.skin.*; // Skin、MaterialSkin、IOSSkin、FlutterSkin
/** 可执行的主界面。将 launcher 指向此类(classname)并运行:gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
Skin.set(new IOSSkin()); // 全局皮肤 = iOS 的结构/形态(颜色仍来自主题)
setLayout(new VerticalLayout());
// 实时切换全局皮肤的按钮:
Button material = new Button("Skin Material");
material.onAction(c -> { Skin.set(new MaterialSkin()); restyle(); });
add(LAY_AUTO, material);
Button ios = new Button("Skin iOS");
ios.onAction(c -> { Skin.set(new IOSSkin()); restyle(); });
add(LAY_AUTO, ios);
Button flutter = new Button("Skin Flutter");
flutter.onAction(c -> { Skin.set(new FlutterSkin()); restyle(); });
add(LAY_AUTO, flutter);
// 按组件设置皮肤:即使全局改变,此按钮仍保持 iOS。
Button fixoIos = new Button("Sempre iOS");
fixoIos.skin(new IOSSkin());
add(LAY_AUTO, fixoIos);
}
}
下面的片段只展示了核心部分(放入
onShow()内部的内容)。要运行它们,请将其放入上面的MainWindow骨架中。
切换全局 skin
影响所有没有自身 skin 的组件:
Skin.set(new IOSSkin()); // 整个 UI 获得 iOS 外观
Skin.set(new FlutterSkin()); // … 或 Flutter
按组件设置 skin
仅在该组件上覆盖全局设置:
meuBotao.skin(new IOSSkin()); // 这个按钮用 iOS 风格,其余继续用 Material
自定义 skin(改变形状/间距,而非颜色)
扩展一个 skin 并覆盖其结构钩子:
public class RoundedSkin extends MaterialSkin {
@Override public float borderRadius() { return 1.5f; } // 圆角很大
@Override public float borderThick() { return 0.05f; } // 细边框
}
// 全局应用:
Skin.set(new RoundedSkin());
要将颜色适配明/暗,不要改动 skin — 请使用 ColorScheme/ThemeMode
(参见 明/暗模式)。
各层如何交互
最佳实践
- 在启动时选择一个全局 skin;仅在例外情况下按组件使用
.skin(...)。 - 自定义 skin = 形状/间距/阴影。颜色和明/暗 =
ColorScheme。
常见错误
- 试图通过覆盖 skin 来改变颜色 — 颜色来自
ColorScheme,而非 skin。 - 在同一个界面中不必要地混用不同的 skin(视觉不一致)。
另请参阅
这个页面有帮助吗?感谢你的反馈!