根据android中的语言环境进行地址格式化

sha*_*enq 7 android street-address

您好,在我的应用程序中,我需要根据用户设置的区域设置显示输入地址.有没有人在Android平台上工作或解决格式或有任何指针.

Fun*_*nal 5

查看googlei18n/libaddressinput:谷歌的邮政地址库,为Android和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);
}
Run Code Online (Sandbox Code Playgroud)

注意:regionCode必须是有效的iso2国家/地区代码,因为这是格式解释器从中提取地址格式的位置.(如果你很好奇,请参阅RegionDataConstants获取格式列表.)

设置地址的2个字母的CLDR区域代码; 请参阅AddressData#getPostalCountry().与传递给构建器的其他值不同,区域代码永远不能为空.

示例:美国

801 CHESTNUT ST
ST.LOUIS,MO 63101

示例:JP

〒1600023NISHISHINJUKU3-2-11
西新
珠口新宿区东京