怎么把android中的NumberPicker水平显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么把android中的NumberPicker水平显示相关的知识,希望对你有一定的参考价值。
可以采用RelativeLayout布局,设置B1在最左边,然后B2在B1 右边,B3在B2右边,这些设置在xml文件中都有对应的位置设置的;也可以用LinearLayout,水平排列 参考技术A <NumberPickerandroid:id="@+id/date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:orientation="horizontal" />
Android NumberPicker OnValueChangeListener
【中文标题】Android NumberPicker OnValueChangeListener【英文标题】: 【发布时间】:2013-05-11 13:44:24 【问题描述】:我有一个关于 Android NumberPicker
的问题。
当用户在 NumberPicker
上执行 Fling 时,每一步都会触发 OnValueChange
的侦听器。我可以这样改变吗,oldVal 和 newVal 之间的差异可能超过 1 并且 Listener 只触发一次?
提前致谢。
编辑: 我将尝试在我的代码中更具体地解释它。
int diff = Math.abs(newVal - oldVal);
if (newVal - oldVal > 0)
sendMessage(te);
for (int i = 0; i < diff; i++)
sendMessage(plus);
sendMessage(te);
else if (newVal - oldVal < 0)
sendMessage(te);
for (int i = 0; i < diff; i++)
sendMessage(minus);
sendMessage(te);
else
if (D)
Log.w(TAG, "This should NEVER happen");
此方法称为 inonValueChange。它发送消息的速度太快,以至于我连接的设备无法及时做出反应。所以我需要以任何方式放慢速度。有谁知道如何在不让我的主线程休眠的情况下减慢它的速度?当它处于睡眠状态时,整个 GUI 在此期间没有响应。我尽量避免这种情况。
谢谢。
【问题讨论】:
【参考方案1】:您可以使用setOnScrollListener
代替setOnValueChangedListener
,并在滚动状态为SCROLL_STATE_IDLE
时获取选择器的值。检查这个例子:
numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener()
private int oldValue; //You need to init this value.
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState)
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE)
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
);
请注意,您需要在侦听器中初始化 oldValue
变量的值。如果你需要创建一个通用的监听器(可以接收任何值的数组),你可以创建一个实现NumberPicker.OnScrollListener
的自定义类,并在构造函数中接收初始值。像这样的:
public class MyNumberPickerScrollListener implements NumberPicker.OnScrollListener
private int oldValue;
public MyNumberPickerScrollListener(int initialValue)
oldValue = initialValue;
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState)
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE)
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
阅读NumberPicker.onScrollListener 文档了解更多信息。
【讨论】:
这还没有解决我的问题。我想做的是:只要它是一扔什么都不做。当它停止时,获取新值与投掷前值之间的差异。使用该值执行一些功能。此外,我想要相同的功能,当值仅通过单击而更改为 1 时,而不是一掷千金。每次以任何方式更改时,我都需要发送许多命令,这些命令与差异一样高。 查看更新后的响应是否符合您需要实施的内容 ;-) 2013 年添加,2021 年仍然有用 :)以上是关于怎么把android中的NumberPicker水平显示的主要内容,如果未能解决你的问题,请参考以下文章
在使用 TimePicker 或 NumberPicker 查看对话框首选项时旋转 Android 设备会导致应用程序崩溃