当前位置: 首页 > 面试题库 >

NumberPicker不适用于键盘

越学义
2023-03-14
问题内容

activity_main.xml

<NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp" />

MainActivity.java内部oncreate

NumberPicker numberPicker1 = (NumberPicker) findViewById(R.id.numberPicker1);
numberPicker1.setMinValue(1);
numberPicker1.setMaxValue(20);

当我用键盘编辑值,我得到html" target="_blank">编程值不会改变,但如果我按+,然后-它的作品。

我如何使其工作而不必按+-

编辑:

我用MelihAltıntaş的代码创建了一个新项目,它显示了一个全新的数字选择器!(您用手指滑动而无法输入文本的位置)。然后,我将其与实际项目进行了比较,然后看到了android:theme="@android:style/Theme.NoTitleBar"。我将其添加到新项目中,然后数字选择器成为了我习惯的数字选择器。


问题答案:

NumberPicker不是为这种互动。当您使用键盘更改值时,您是直接从更改窗口小部件,NumberPicker而窗口小部件本身看不到此更改,因此这就是您最后存储值的原因。要解决此问题,您将需要一些hacky代码(实际上不建议这样做),因为您需要访问底层代码EditText(假设电话制造商最初并未对此进行更改):

private EditText findInput(ViewGroup np) {
    int count = np.getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = np.getChildAt(i);
        if (child instanceof ViewGroup) {
            findInput((ViewGroup) child);
        } else if (child instanceof EditText) {
            return (EditText) child;
        }
    }
    return null;
}

然后,您将使用以下代码TextWatcher在找到的内容上设置一个,EditText以查看何时对其进行了手动修改(并NumberPicker告知此更改):

EditText input = findInput(np);    
TextWatcher tw = new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {}

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {}

        @Override
        public void afterTextChanged(Editable s) {
                if (s.toString().length() != 0) {
                    Integer value = Integer.parseInt(s.toString());
                    if (value >= np.getMinValue()) {
                        np.setValue(value);
                    }
                }
        }
    };
input.addTextChangedListener(tw);

另一种选择是使您自己的NumberPicker小部件实现并插入目标功能。



 类似资料:
  • 我正在使用以下方法隐藏键盘 它将输入作为“活动”,并在我点击屏幕时隐藏键盘。如果父布局没有嵌套的子布局,则工作正常。但是如果父布局有嵌套的子布局,即使我在点击嵌套的子布局时仍不使用它们。软键盘没有隐藏。 这个问题的解决方案是为嵌套的子布局创建侦听器,然后再次调用上面的方法。但是,有没有其他方法可以隐藏键盘而不设置内部子布局的侦听器。 下面是我使用的布局 在我的活动中我正在做

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 我定义了一个外键。为了检查它,我在具有外键的表中插入了错误的值。未打印任何错误,值已成功添加。我不知道我是否正在运行一些旧版本的sqlite3或类似的东西,我对这个领域是完全陌生的。 创建表ref(value 1 int, value 2,主键(value 1)); 为(value1 int、value3 int、主键(value3)、外键(value1)引用ref(value1))创建表; 插入

  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P