IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Utiliser la valeur d'un spinner lors de la déclaration d'une variable locale


Sujet :

Composants graphiques Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Utiliser la valeur d'un spinner lors de la déclaration d'une variable locale
    Bonjour à tous,

    Je suis actuellement en train de réaliser une application Android qui a pour but de synthétiser vocalement un texte remplit par l'utilisateur.

    Plan de l'application :
    Un EditText pour saisir le texte a synthétiser
    Un Spinner pour choisir la langue de la voix
    Un Button pour lancer l'action

    Le problème se situe au moment ou je déclare la langue de la voix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        //setup TTS
    public void onInit(int initStatus) {	
     
            //check for successful instantiation
        if (initStatus == TextToSpeech.SUCCESS) {
            if(myTTS.isLanguageAvailable(Locale.FRENCH)==TextToSpeech.LANG_AVAILABLE)
                myTTS.setLanguage(Locale.FRENCH);
        }
        else if (initStatus == TextToSpeech.ERROR) {
            Toast.makeText(this, "Sorry! Text To Speech failed...", Toast.LENGTH_LONG).show();
        }
    }
    J'aimerais remplacer Locale.FRENCH par Locale."la valeur choisie dans la liste déroulante",
    seulement Locale n'accepte après le point qu'une langue.

    Avez vous une idée ? Merci à tous =)

  2. #2
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Points : 83
    Points
    83
    Par défaut
    D'après la documentation d'Oracle :

    http://docs.oracle.com/javase/1.4.2/...il/Locale.html

    Tu as les constructeurs que tu souhaites pour ta locale, notamment les deux suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Locale(String language)
    Locale(String language, String country)
    Attention, à bien utiliser, la valeur iso du code de langue :
    Liste disponible ici : http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt
    Et de même pour le country :
    Liste disponible ici : http://userpage.chemie.fu-berlin.de/.../ISO_3166.html

    Ainsi, pour ton bout de code ligne 7, le code suivant devrait avoir le même résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            if(myTTS.isLanguageAvailable(new Locale("fr", "fr"))==TextToSpeech.LANG_AVAILABLE)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci herfrayg de m'avoir mis sur la piste.

    J'ai plutôt bien avancé, voyez plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    private Spinner s;
     
    private Locale lang;
     
        //Création de l'activity
    public void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     
        	/*Spinner*/ s = (Spinner) findViewById(R.id.language);
     
        	ArrayAdapter adapter = ArrayAdapter.createFromResource(
                    this, R.array.language, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            s.setAdapter(adapter);
     
                //get a reference to the button element listed in the XML layout
            Button speakButton = (Button)findViewById(R.id.speak);
                //listen for clicks
            speakButton.setOnClickListener(this);
     
            //check for TTS data
            Intent checkTTSIntent = new Intent();
            checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
            startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE);
    }
    Je déclare un Spinner et une variable "Locale", puis je remplis le Spinner dans la procédure OnCreate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public void onInit(int initStatus) {	
     
    	if(s.getSelectedItem().toString() == "FRENCH") {
    		lang = new Locale("fr");
    	}
    	else
    	{
    		lang = new Locale("en_US");
    	}
     
            //check for successful instantiation
        if (initStatus == TextToSpeech.SUCCESS) {
            if(myTTS.isLanguageAvailable(lang)==TextToSpeech.LANG_AVAILABLE)
                myTTS.setLanguage(lang);
        }
        else if (initStatus == TextToSpeech.ERROR) {
            Toast.makeText(this, "Sorry! Text To Speech failed...", Toast.LENGTH_LONG).show();
        }
    }
    Dans ma procédure onInit, je test la valeur du Spinner et je définis la variable "Locale".

    Malheureusement, la langue reste toujours en anglais.. :/

  4. #4
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Points : 83
    Points
    83
    Par défaut
    Dans la doc jointe, pour de l'anglais américain, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Locale("en", "us");
    Et qu'est ce que cela donne si tu ne te contentes que de :


  5. #5
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    En Java, il ne faut pas utiliser l'opérateur == pour tester l'égalité de deux chaînes de caractères, mais la méthode equals
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(s.getSelectedItem().toString().equals("FRENCH"))
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(s.getSelectedItem().toString() == "FRENCH")
    Etc...

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/05/2013, 07h05
  2. Réponses: 1
    Dernier message: 22/02/2008, 11h30
  3. Réponses: 5
    Dernier message: 05/09/2007, 16h23
  4. Erreur lors de la création d'une variable
    Par neuro6 dans le forum C++
    Réponses: 5
    Dernier message: 22/01/2007, 08h40
  5. Réponses: 6
    Dernier message: 29/04/2006, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo