我正在开发基于Android 2.1的应用程序,在我的应用程序的一个页面上,需要一个数字选择器。我们知道android 2.1不包含numberpicker控件,所以我写了一个。
我需要在Android 2.1上显示我的numberpicker版本,但在Android 4.0中显示ICS样式numberpicker,为了达到这个目的,我使用了反射,在我的代码中,我检测到当前的Build.VERSION.SDK_INT> = 14,我反映了目标平台的数量选择,并动态地将其添加到当前视图中。
我的问题是,当我在Android 4.0平台上运行我的应用程序时,我可以反映一个数字选择器,但数字选择器样式似乎不是ICS样式,为什么?
提前感谢!
答案 0 :(得分:2)
如果您有耐心,可以回传NumberPicker class。除此之外,为什么要使用反射?如果将目标API设置为15,这就是您所需要的。在layout
文件夹中声明您的替代号码选择器。 layout-v11
{API 1 Honeycomb或更高版本中提供NumberPicker
)声明android.widget.NumberPicker
。给每个人提供相同的ID,并在你的活动中提供以下内容:
private NumberPicker mNumPicker;
private SomeView mOldNumPicker;
public void onCreate(...) {
// Use NumberPicker
if (android.os.Build.VERSION.SDK_INT >= 11) {
mNumPicker = findViewById(R.id.numpicker);
} else {
mOldNumPicker = findViewById(R.id.numpicker);
}
}
这是您不需要反射,并且由于访问不存在的API而不会遇到任何崩溃。从现在开始,您只需检查if (mNumPicker == null)
和if (mOldNumPicker == null)
,然后根据该方法确定要调用的方法。还有一个Number Picker using Buttons and an EditText的例子。