Как получить пользователю предпочтительные единицы?(метрическая (метры) или имперская (мили))? - PullRequest
14 голосов
/ 11 августа 2011

Я хотел бы знать, какие пользовательские единицы измерения выбираются между милями и метрами. Кажется, что класс "Locale" не позволяет этого.

Ответы [ 4 ]

11 голосов
/ 11 августа 2011

Несмотря на то, что нет способа получить предпочтительные единицы, используя Locale, по умолчанию можно предположить, что если Locale указывает Соединенные Штаты или Мьянму (locale.getISO3Country().equalsIgnoreCase("usa") || locale.getISO3Country().equalsIgnoreCase("mmr")), предпочтительные единицы являются имперскими, в противном случае предпочтительные единицы являются метрическими , В любом случае, когда единицы измерения могут отображаться либо в имперской, либо в метрической форме, показанная измерительная система должна быть задана пользователем.

В некоторых странах существуют определенные особенности, в которых участвуют юниты. (См. Также принятый ответ на момент написания этой статьи.) Например, хотя предпочтительные ежедневные единицы в Соединенном Королевстве - это метрические единицы, есть некоторые исключения, в частности & mdash;

  • миль и миль в час в наземном транспорте;
  • миль в час при скорости ветра;
  • пинты и галлоны для молока и пива (но не для большинства других продуктов питания и напитков); и
  • камень, или камень и фунты, для веса человека.
8 голосов
/ 11 августа 2011

Я не думаю, что обязательно есть правильный ответ на вопрос «Метрика / Империя» для всех регионов.

Например, в Великобритании мы обычно используем мили на большие расстояния, такие как путешествие на автомобиле, футы и дюймыдля роста людей, но могут использовать метры для описания размеров комнаты.

Мы почти всегда используем литры для измерения объема жидкости, за исключением пива и иногда молока, которое все еще можно продавать в пинтах.

Килограммы обычно предпочитают килограммам и унциям, но в большинстве книг рецептов перечисляются оба, поскольку у некоторых людей все еще есть весы, которые используют последний.что вы хотите измерить (и, конечно же, дать пользователю возможность выбрать один или другой вручную.)

2 голосов
/ 11 августа 2011

Поскольку некоторые люди за пределами США, возможно, установили язык на английский (США), в конечном итоге лучше взять возвращаемое значение getSimCountryIso() вместо getISO3Country()

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = tm.getSimCountryIso();

Если countryCode это us SIM-карта является американской, и поэтому лучшим выбором могут быть имперские единицы - в любом другом случае применяется метрическая система

1 голос
/ 11 августа 2011
  1. Сборка Locale : Country : Metric

  2. Вы можете использовать Locale.getDefault(), чтобы получить соответствующий языковой стандарт для пользователя устройства, на котором вы работаете

  3. Выполнить поиск по построенной таблице

Результат твой!

...