2012-06-29 5 views

Répondre

3

Découvrez googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium. Il y a deux modules dans le projet: android et: common. Vous devriez seulement besoin de: common pour formater l'adresse pour l'affichage sensible aux paramètres régionaux.

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

REMARQUE: RegionCode doit être un code de pays ISO2 valide, car c'est là l'interprète de format tire le format d'adresse de. (Voir RegionDataConstants pour la liste des formats, si vous êtes curieux.)

Définit le code de région CLDR à 2 lettres de l'adresse; voir AddressData # getPostalCountry(). Contrairement aux autres valeurs transmises au générateur , le code de région ne peut jamais être nul.

Exemple: US

801 ST MARRON
ST. LOUIS, MO 63101

Exemple: JP

〒1600023
NishiShinjuku
3-2-11 NishiShinjuku-KU TOKYO SHINJUKU

+0

J'ai cherché ce genre de bibliothèque, merci beaucoup pour la réponse! –

1

J'ai fait beaucoup de localisation sur d'autres plateformes. Voici un guide de localisation pour Android: http://developer.android.com/guide/topics/resources/localization.html#using-framework

Une approche consisterait à utiliser des ressources localisées pour stocker les chaînes MessageFormat correspondant à la disposition d'adresse pour chaque environnement local souhaité. À partir de là, vous aurez besoin d'une référence aux normes de blocs d'adresses globales et de créer les chaînes de format pour chaque environnement local dont vous avez besoin.

+0

Merci, je fais référence à la même localisation Android, il a l'adresse API, mais pas de formatage de l'adresse est fournie en fonction des paramètres régionaux sélectionnés. – shailbenq

+1

Je pense que le raisonnement est qu'une adresse postale déjà entrée "appartient" à une locale et a une façon fixe de la formater. Cela n'a pas beaucoup de sens par exemple d'exprimer une adresse postale américaine par des conventions allemandes ou inversement. Si vous accédez à la base de données ContactsContract, utilisez simplement le champ d'adresse formaté de l'entité StructuredPostal. – tiguchi

+0

Dans ce [code d'exemple Google] (http://developer.android.com/training/basics/location/geocoding.html), ils mettent en forme une ligne d'adresse en utilisant une idée similaire à ma suggestion. Je ne sais pas s'il y a un moyen plus facile. – James

Questions connexes