dialogs.input 仅允许输入数字,不准输入字符串

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

dialogs.input输入了数字和字符串程序闪退

第 2 条补充
·
1 个月前

floaty.window 如何定一个圆形按钮

回答

Hamibot AI
1
· 1 个月前

在Hamibot中,dialogs.input本身不会强制限制输入类型,但可以通过以下方式实现仅接收数字输入:

// 文档地址 https://docs.hamibot.com/
dialogs.input('请输入数字', '0').then(function(input) {
    var num = parseInt(input);
    if (!isNaN(num)) {
        toast("您输入的数字是:" + num);
    } else {
        toast("输入无效,请输入数字");
    }
});

实现原理

  1. 使用parseInt()尝试将输入转换为整数
  2. 通过isNaN()检查转换结果是否有效
  3. 在回调中添加类型验证逻辑

如果需要更严格的校验(如浮点数/正整数),可扩展验证逻辑:

// 验证正整数
if (/^\d+$/.test(input)) {
    // 有效数字
} else {
    // 错误处理
}

补充回答 1

在Hamibot中使用dialogs.input时,若输入内容导致程序闪退,通常是因为未正确处理输入类型或异常情况。以下是修复方案:

// 文档地址 https://docs.hamibot.com/
try {
    var input = dialogs.input('请输入内容', '默认值');
    // 显式类型判断
    if (typeof input === 'number') {
        toast("您输入的是数字: " + input);
    } else if (typeof input === 'string') {
        toast("您输入的是字符串: " + input);
    } else {
        toast("输入类型异常");
    }
} catch (e) {
    toast("发生错误: " + e);
}

关键点说明

  1. 类型验证:通过typeof判断输入类型,避免直接使用可能非字符串的值
  2. 异常捕获:用try-catch包裹代码,防止eval执行时抛出的异常导致程序崩溃
  3. 安全处理:若需严格限制数字输入,可增加正则校验:
if (/^\d+$/.test(input)) { // 仅允许数字
    // ... 
} else {
    toast("请输入纯数字");
}

注意事项

  • dialogs.input会自动对输入内容执行eval(),若输入非法表达式(如abc)会抛出异常
  • 建议优先使用dialogs.rawInput获取原始字符串,再自行处理逻辑
  • 若需数字输入,可使用parseInt()/parseFloat()转换并添加校验

补充回答 2

在 Hamibot 的 floaty.window 中创建圆形按钮,可以通过以下步骤实现:

实现思路

  1. 使用 floaty.window 创建悬浮窗布局
  2. 通过 XML 布局定义按钮区域
  3. 使用 android:background 设置圆形背景
  4. 添加点击事件监听

示例代码

// 文档地址 https://docs.hamibot.com/
var w = floaty.window(
    <vertical gravity="center">
        <!-- 圆形按钮 -->
        <view id="circleBtn" 
              w="100" 
              h="100" 
              bg="#FF0000" 
              margin="50" 
              android:background="@drawable/circle" />
    </vertical>
);

// 添加点击事件
w.circleBtn.click(function() {
    toast("圆形按钮被点击了!");
});

关键点说明

  1. 宽高设置:通过 w="100"h="100" 确保按钮为正方形
  2. 圆形背景
    • 需要提前在 res/drawable 目录下创建 circle.xml 文件
    • circle.xml 内容示例:
      <shape xmlns:android="http://schemas.android.com/apk/res/android">
          <solid android:color="#FF0000" />
          <corners android:radius="50dp" />
      </shape>
      
  3. 兼容性说明
    • 如果无法直接使用 android:background,可通过 UI 模块动态创建 View:
      var view = new android.widget.Button(context);
      view.setLayoutParams(new android.widget.LinearLayout.LayoutParams(100, 100));
      view.setBackground(new android.graphics.drawable.ShapeDrawable(new android.graphics.drawable.shapes.OvalShape()));
      view.setBackgroundColor(0xFFFF0000);
      w.addView(view);
      

注意事项

  • XML 中的 android:background 需要正确配置 drawable 资源
  • 若需动态修改按钮样式,建议使用 ui.run() 在 UI 线程操作
  • 圆角半径值需根据按钮尺寸调整,确保完全圆形
ℹ️ 本回答由 AI 生成,内容仅供参考