2012-06-29 18 views

Respuesta

3

Echa un vistazo googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium. Hay dos módulos en el proyecto: android y: common. Solo debe necesitar: común para formatear la dirección para la visualización de configuración regional.

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); 
} 

NOTA: regionCode debe ser un código de país ISO2 válida, porque aquí es donde el intérprete formato de tira del formato de dirección de. (Consulte RegionDataConstants para conocer la lista de formatos, si le interesa)

Establece el código de región CLDR de 2 letras de la dirección; ver AddressData # getPostalCountry(). A diferencia de otros valores pasados ​​al constructor , el código de región nunca puede ser nulo.

Ejemplo: US

801 Chestnut St
ST. LOUIS, MO 63101

Ejemplo: JP

〒1600023
Nishishinjuku
3-2-11 Nishishinjuku Shinjuku-ku Tokyo

+0

He estado buscando este tipo de biblioteca, ¡muchas gracias por la respuesta! –

1

He hecho un poco de localización en otras plataformas. Aquí hay una guía de localización para Android: http://developer.android.com/guide/topics/resources/localization.html#using-framework

Un enfoque sería utilizar recursos localizados para almacenar las cadenas de MessageFormat que corresponden al diseño de direcciones para cada configuración regional que desee. A partir de ahí, necesitará una referencia a los estándares de bloque de direcciones globales y crear las cadenas de formato para cada configuración regional que necesite.

+0

Gracias, me refiero a la misma localización de Android que tiene API de direcciones, pero no se proporciona el formato de la dirección en función de la configuración regional seleccionada. – shailbenq

+1

Creo que el razonamiento es que una dirección postal ya ingresada "pertenece" a una configuración regional y tiene una forma fija de formatearla. No tiene mucho sentido, por ejemplo, expresar una dirección postal de EE. UU. Por convenciones alemanas o viceversa. Si está accediendo a la base de datos de ContactsContract, simplemente use el campo de dirección formateada de la entidad StructuredPostal. – tiguchi

+0

En este [código de ejemplo de Google] (http://developer.android.com/training/basics/location/geocoding.html) formatean una línea de dirección con una idea similar a mi sugerencia. No estoy seguro si hay una manera más fácil. – James

Cuestiones relacionadas