使用区域设置来检测是否使用英制单位

我正在开发一个应用程序,希望以厘米(cm)或英寸(“)显示长度。有没有办法从本地select正确的单位?无论如何,我也要放入选项,以便用户可以覆盖区域设置。

美国,利比里亚和缅甸应该使用帝国单位和其他世界正常单位。 一种方法是把这个逻辑放在我自己的类中,但是如果可用的话我更喜欢使用任何内置的逻辑。 任何指针?

Solutions Collecting From Web of "使用区域设置来检测是否使用英制单位"

最后我去了下面的解决scheme。

public class UnitLocale { public static UnitLocale Imperial = new UnitLocale(); public static UnitLocale Metric = new UnitLocale(); public static UnitLocale getDefault() { return getFrom(Locale.getDefault()); } public static UnitLocale getFrom(Locale locale) { String countryCode = locale.getCountry(); if ("US".equals(countryCode)) return Imperial; // USA if ("LR".equals(countryCode)) return Imperial; // liberia if ("MM".equals(countryCode)) return Imperial; // burma return Metric; } } 

例如像这样使用它。

 if (UnitLocale.getDefault() == UnitLocale.Imperial) convertToimperial(); 

如果还需要convert方法,则最好将它们添加到UnitLocale的子类中。 我只需要检测使用英制单位,并将其发送到服务器。

使用int对java对象的性能提升非常微弱,代码难以阅读。 在Java中比较两个引用可以比较两个ints速度。 还使用对象允许我们将方法添加到UnitLocale类或子类,如convertToMetric等。

如果您喜欢,也可以使用枚举。

只要给用户在设置菜单中select首选设备的选项。 如果是旅行用户,您不希望应用程序在地理位置上知晓IMO。

  1. 编程

在@vidstige的解决scheme中做一些小的改进

我将使用getCountry()。toUpperCase()来保证安全,并将检查更改为更清晰的代码。 像这样的东西:

 public static UnitLocale getFrom(Locale locale) { String countryCode = locale.getCountry().toUpperCase(); switch (countryCode) { case "US": case "LR": case "MM": return Imperial; default: return Metric; } } 
  1. 从资源

另一个解决scheme可能是为每个国家创build资源文件夹,如:[values_US] [values_LR] [values_MM],布尔资源更改为true。 然后从代码中读取该布尔资源。