2012-06-29 36 views

回答

3

結賬googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium。該項目中有兩個模塊:android和:common。您應該只需要:common來格式化區域識別顯示的地址。

import android.location.Address; 
import android.support.annotation.NonNull; 
import android.text.TextUtils; 
import com.google.i18n.addressinput.common.AddressData; 
import com.google.i18n.addressinput.common.FormOptions; 
import com.google.i18n.addressinput.common.FormatInterpreter; 
... 
public static String getFormattedAddress(@NonNull final Address address, 
             @NonNull final String regionCode) { 
    final FormatInterpreter formatInterpreter 
      = new FormatInterpreter(new FormOptions().createSnapshot()); 
    final AddressData addressData = (new AddressData.Builder() 
      .setAddress(address.getThoroughfare()) 
      .setLocality(address.getLocality()) 
      .setAdminArea(address.getAdminArea()) 
      .setPostalCode(address.getPostalCode()) 
      .setCountry(regionCode) // REQUIRED 
      .build()); 
    // Fetch the address lines using getEnvelopeAddress, 
    List<String> addressFragments = formatInterpreter.getEnvelopeAddress(addressData); 
    // join them, and send them to the thread. 
    return TextUtils.join(System.getProperty("line.separator"), 
      addressFragments); 
} 

注:regionCode必須是有效的ISO2國家代碼,因爲這是格式解釋是直接從地址格式。 (如果您好奇,請參閱RegionDataConstants獲取格式列表。)

設置地址的雙字母CLDR區域碼;請參閱 AddressData#getPostalCountry()。與傳遞給 構建器的其他值不同,區域代碼不能爲空。

實施例:US

801 CHESTNUT ST
ST。 LOUIS,MO 63101

例:JP

〒1600023
西新宿
11年3月2日西新宿新宿區東京

+0

我一直在尋找這類圖書館,非常感謝答案! –

1

我已經在其他平臺上進行了一點本地化。以下是Android本地化指南:http://developer.android.com/guide/topics/resources/localization.html#using-framework

一種方法是使用本地化資源來存儲對應於所需每個語言環境的地址佈局的MessageFormat字符串。從那裏,您需要參考全球地址塊標準,併爲您需要的每個地區創建格式字符串。

+0

謝謝,我指的是它具有Address API的相同的Android本地化,但沒有提供基於所選區域設置的地址格式。 – shailbenq

+1

我認爲推理是一個已經輸入的郵政地址「屬於」一個地區,並有一個固定的格式化方式。例如用德國公約或其他方式表達美國郵寄地址是沒有道理的。如果您正在訪問ContactsContract數據庫,則只需使用結構化郵遞實體的格式化地址字段。 – tiguchi

+0

在這個[Google示例代碼](http://developer.android.com/training/basics/location/geocoding.html)中,他們使用類似於我的建議的想法格式化地址行。不知道是否有更簡單的方法。 – James