0

我正在开发一个基于 Android 2.1 的应用程序,在我的应用程序的一个页面上,需要一个数字选择器。我们知道 android 2.1 不包含 numberpicker 控件,所以我写了一个。

我需要在 Android 2.1 上显示我的 numberpicker 版本,但是 Android 4.0 中的 ICS 样式 numberpicker,为了实现这个目标,我使用了反射,当在我的代码中,我检测到当前的 Build.VERSION.SDK_INT >= 14,我反映目标平台的数字选择器,并将其动态添加到当前视图。

我的问题是,当我在 Android 4.0 平台上运行我的应用程序时,我可以反映一个 numberpicker,但是 numberpicker 样式似乎不是 ICS 样式,为什么?

提前致谢!

4

1 回答 1

2

如果您有耐心,您可能会反向移植NumberPicker 类。除此之外,为什么要使用反射?如果您将目标 API 设置为 15,这就是您所需要的。在您的layout文件夹中声明您的备用号码选择器。在layout-v11NumberPicker在 API 11 Honeycomb 或更高版本中可用)声明android.widget.NumberPicker。为每个人提供相同的 ID,并在您的 Activity 中包含以下内容:

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)确定基于此调用哪些方法。还有一个使用 Buttons 和 EditText 的 Number Picker示例。

于 2012-06-07T13:34:45.557 回答