xml形式 radio,seekbar 修改大小及颜色 完整demo

已存档
兔如花
9
· 1 个月前
第 1 条补充
·
1 个月前

在floaty.window模式下实现

第 2 条补充
·
1 个月前

radio 按钮大小,seekbar滑块大小

回答

Hamibot AI
1
· 1 个月前
<?xml version="1.0" encoding="utf-8"?>
<vertical xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <!-- RadioGroup 示例 -->
    <radiogroup
        android:id="@+id/radioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <radio
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="选项1"
            android:textColor="#FF0000"
            android:textSize="18sp" />

        <radio
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="选项2"
            android:textColor="#00FF00"
            android:textSize="18sp" />
    </radiogroup>

    <!-- SeekBar 示例 -->
    <seekbar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:progressTint="#0000FF"
        android:thumbTint="#FF0000"
        android:layout_marginTop="24dp" />

</vertical>

代码说明:

  1. RadioGroup

    • 使用 android:textColor 设置文本颜色(#FF0000=红色,#00FF00=绿色)
    • 使用 android:textSize 设置文本大小(18sp)
    • 控件大小由 wrap_content 自适应内容
    • android:orientation="vertical" 实现垂直排列
  2. SeekBar

    • android:max="100" 设置最大值
    • android:progress="50" 设置初始进度
    • android:progressTint="#0000FF" 设置进度条颜色(蓝色)
    • android:thumbTint="#FF0000" 设置滑块颜色(红色)
    • match_parent 让进度条占满父容器宽度

附加配置:

若需使用自定义样式,可在 res/values/styles.xml 中定义主题样式,或通过 ui.useAndroidResources() 启用原生资源管理(需配置 project.json)。


补充回答 1

// 文档地址 https://docs.hamibot.com/

// 创建悬浮窗
var window = floaty.window(
    <vertical padding="16">
        {/* RadioGroup 示例 */}
        <radiogroup id="rg">
            <radio 
                text="选项1"
                textColor="#FF0000"
                textSize="18sp"
                margin="8"
            />
            <radio 
                text="选项2"
                textColor="#00FF00"
                textSize="18sp"
                margin="8"
            />
        </radiogroup>

        {/* SeekBar 示例 */}
        <seekbar
            id="sb"
            max="100"
            progress="50"
            progressTint="#0000FF"
            thumbTint="#FF0000"
            margin="24 0"
        />
    </vertical>
);

// 设置悬浮窗属性
window.setSize(-2, -2); // 自适应内容大小
window.setPosition(100, 200); // 初始位置
window.setTouchable(true); // 允许触摸交互

// 添加关闭逻辑(点击空白处关闭)
window.get().setOnClickListener(function() {
    window.close();
});

// 动态更新示例
setInterval(function() {
    var progress = window.sb.getProgress();
    log("当前进度: " + progress + "%");
}, 3000);

核心功能说明:

  1. 悬浮窗构建

    • 使用 floaty.window() 创建带布局的悬浮窗
    • 通过 setSize(-2, -2) 实现自适应内容大小
    • setPosition() 设置初始坐标(单位:像素)
  2. 控件样式控制

    • RadioGroup:通过 textColortextSize 控制文本样式
    • SeekBarprogressTint 设置进度条颜色,thumbTint 设置滑块颜色
  3. 交互扩展

    • setTouchable(true) 启用触摸交互
    • 添加点击监听器实现关闭功能
    • 可通过 getProgress() 获取实时进度值

调整建议:

  • 悬浮窗大小:将 setSize(-2, -2) 改为 setSize(300, -2) 固定宽度
  • 布局优化:使用 margin="16" 设置外边距提升可视效果
  • 样式扩展:可添加 bg="#透明度+RGB" 实现背景色(如 bg="#88FFFFFF" 半透明白)

注意:运行前需开启悬浮窗权限。代码中所有尺寸单位均为像素,颜色值支持十六进制、HTML颜色名称等多种格式。


补充回答 2

// 文档地址 https://docs.hamibot.com/

// 创建悬浮窗
var window = floaty.window(
    <vertical padding="16">
        {/* RadioGroup 容器 */}
        <horizontal>
            <radiogroup id="rg">
                <radio 
                    id="radio1"
                    text="选项1"
                    textColor="#FF0000"
                    textSize="18sp"
                    width="50"
                    height="50"
                    scale="1.5"
                    margin="8"
                />
                <radio 
                    id="radio2"
                    text="选项2"
                    textColor="#00FF00"
                    textSize="18sp"
                    width="50"
                    height="50"
                    scale="1.5"
                    margin="8"
                />
            </radiogroup>
        </horizontal>

        {/* SeekBar 容器 */}
        <horizontal margin="0 16">
            <seekbar
                id="sb"
                max="100"
                progress="50"
                progressTint="#0000FF"
                thumbTint="#FF0000"
                height="40"
                scale="1.2"
            />
        </horizontal>
    </vertical>
);

// 设置悬浮窗属性
window.setSize(-2, -2);
window.setPosition(100, 200);
window.setTouchable(true);

// 获取控件视图对象
var radio1 = window.radio1.get();
var radio2 = window.radio2.get();
var seekBar = window.sb.get();

// 动态调整Radio按钮大小
radio1.setScaleX(1.5);
radio1.setScaleY(1.5);
radio2.setScaleX(1.5);
radio2.setScaleY(1.5);

// 调整SeekBar滑块大小
seekBar.getThumb().setBounds(
    0, 0, 
    40, 40  // 设置滑块的宽高(单位:像素)
);

// 日志监控
setInterval(function() {
    log("Radio1 尺寸: " + radio1.getWidth() + "x" + radio1.getHeight());
    log("SeekBar 滑块位置: " + seekBar.getProgress() + "%");
}, 3000);

关键实现点说明:

  1. Radio 按钮大小控制

    • width/height:直接设置控件尺寸(单位:像素)
    • scale:在XML中声明性缩放(1.5倍)
    • setScaleX/Y():运行时动态控制缩放比例
  2. SeekBar 滑块调整

    • height:控制进度条整体高度(40px)
    • scale:整体缩放(1.2倍)
    • getThumb().setBounds():精确设置滑块尺寸(40x40px)
  3. 布局优化

    • 外层<horizontal>容器防止内容溢出
    • margin 控制元素间距
    • setSize(-2,-2) 自适应内容大小

调整建议:

  • 精准控制:使用setBounds()时需确保已获得实际视图对象(通过.get()
  • 性能优化:避免在循环中频繁调用.get()方法
  • 跨设备适配:可使用device.widthPixels动态计算尺寸

注意:悬浮窗控件尺寸默认单位为像素,若需使用dp单位需手动转换(例如:var dp = device.density; var sizeInDp = 40 * dp)。

ℹ️ 本回答由 AI 生成,内容仅供参考