这件事令我困惑......
我正在检查我的代码,并决定将构建目标从2.3更改为2.2,以确保我使用的每个2.3 API都包含在一个不错的android.os.Build.VERSION.SDK_INT检查中。
但在某处我调用了java.text.Normalizer.normalize(),但没有检查SDK版本。好奇为什么QA找不到这个,我在调试模式的2.2手机上启动了应用程序,它工作正常!
这款手机是LG-P505R 2.2.2版。
那么,为什么2.2手机可以调用2.3中添加的一些API?
我能想到的唯一合乎逻辑的解释是制造商已将此API添加到Android堆栈。
[更新]更疯狂......
我在2.2上测试了这段代码。模拟器,它工作正常:
public class NormalizerTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String s = "This \"é\" will become an \"e\"";
final TextView tv = (TextView) findViewById(R.id.tv);
final String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
final Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
final String strNormalized = pattern.matcher(temp).replaceAll("");
tv.setText(strNormalized);
}
}
答案 0 :(得分:0)
所以现在我唯一的猜测是它在2.3中被公开了,但它一直存在......
答案 1 :(得分:0)
确认java.text.Normalizer
在vanilla API8模拟器中完美运行。只需要在代码中添加lint错误抑制以获得eclipse进行编译。