尝试使用基于2.1 SDK的ICS风格的NumberPicker?

时间:2012-05-22 07:14:24

标签: android android-widget

我正在开发基于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样式,为什么?

提前感谢!

1 个答案:

答案 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的例子。