8
votes

Android: Activer / désactiver un bouton à l'exécution?

OK, alors j'ai deux boutons. Le premier est de "charger du texte" et la seconde est de "parler".

Maintenant, je ne veux pas que le bouton SAIL soit actif pendant qu'il n'y a pas de texte chargé.

i J'ai réussi à définir la valeur dans la méthode OnClickListener de la touche EDITTEXT par le bouton de chargement. À l'intérieur de la même méthode que j'ai appelée, xxx

J'ai initialisé cela comme, xxx

tout le codage est, < / p> xxx

Ceci est pour vérifier l'état et attribuer la langue au TTS pour une utilisation ultérieure. Je reçois le pain grillé comme "le bouton doit fonctionner" mais cela ne sera pas activé. Pourquoi est-ce tellement? Quel est le travail autour?

J'ai dans le fichier .xml comme, xxx

dois-je l'avoir activé ici, puis désactiver et activer en runtime? ?


2 commentaires

Vérifiez si vous initialisiez le bouton avec ID correct


Oui, j'ai avec le bon identifiant.


6 Réponses :


8
votes

Vous devez utiliser setClickable code> xxx pré>

aussi, utilisez isenabled () code> pour vérifier l'état P>

//for checking
if(btnSpeak.isEnabled())
{
  Toast.makeText(SimpleAndroidOCRActivity.this, "Button should work!", Toast.LENGTH_SHORT).show();
}
else
{
  Toast.makeText(SimpleAndroidOCRActivity.this, "Button should not work!", Toast.LENGTH_SHORT).show();
}


3 commentaires

Désolé, j'ai utilisé isenabled, a commis une erreur lors de la vérification ici. Va essayer avec cliquable cependant.


Utilisez SetFocusuble (true) et SetFocusufItouchmode (true)


Oui! C'est la bonne réponse (les événements cliquables et activés doivent être manipulés). Merci @ ling.s.s



13
votes
@Override
public void onInit(int status) {

    if (status == TextToSpeech.SUCCESS) {

        int result = tts.setLanguage(Locale.US);

        if (result == TextToSpeech.LANG_MISSING_DATA
        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "This Language is not supported");
        } else {
            btnSpeak.setEnabled(true);
            //for checking
            if(btnSpeak.isEnabled())
            {
                btnSpeak.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        YourVoicemethod();

                        Toast.makeText(SimpleAndroidOCRActivity.this, "Button should work!", Toast.LENGTH_SHORT).show();
                    }


                });
            }
            else
            {
                Toast.makeText(SimpleAndroidOCRActivity.this, "Button should not work!", Toast.LENGTH_SHORT).show();
            }
        }

    } else {
        Log.e("TTS", "Initilization Failed!");
    }

}

2 commentaires

Cela ne fonctionne pas non plus. Si je laisse tout cela et que les deux boutons activés, lorsque je clique sur le deuxième bouton, je ne reçois pas le son, pourquoi ce serait-il?


Où est la méthode du bouton onclick?



5
votes

Vérifiez que votre bouton est enfoncé ou non et écrivez votre code.

code d'exemple. xxx

J'espère que cela vous aidera.


0 commentaires

1
votes

Vous pouvez réaliser par désactiver et permettre à la visibilité du bouton

Voici un exemple P>

View button = findViewById(R.id.buttonid);
button.setVisibility(View.GONE);


1 commentaires

Merci, cela fonctionne. Bien que je me demande encore pourquoi ne pouvait toujours pas travailler à l'exécution, si je ne reçois aucune solution possible à cela, je choisirais la vôtre comme réponse. Merci une fois de plus.



0
votes

Utilisez un auditeur pour les deux boutons

button1.setOnClickListener(listener);
button2.setOnClickListener(listener);

listener = new OnClickListener({
    @Override
    public void onClick(View v) {
        switch(button_id){
            case id1:
            button2.setEnabled(false);
            button1.setEnabled(true);
            break;
            case id2:
            button1.setEnabled(false);
            button2.setEnabled(true);
            break;
        }
    }
});


0 commentaires

3
votes

Peut être trop tard pour répondre et vous avez déjà trouvé une solution, mais vous pouvez utiliser Invalidate pour forcer le bouton pour redessiner en fonction de son nouvel état:

btnSpeak.setEnabled(true);
btnSpeak.invalidate();


0 commentaires