Ok, j'ai donc deux boutons. Le premier est de "Charger le texte" et le second de "Speak Out".
Maintenant, je ne veux pas que le bouton Parler soit actif tant qu'aucun texte n'est chargé.
J'ai réussi à définir la valeur dans la méthode onClickListener du bouton EditText by Load Text. Dans la même méthode que j'ai appelée,
btnSpeak.setEnabled(true);
J'ai initialisé cela comme,
btnSpeak = (Button) findViewById(R.id.button1);
Le codage entier est,
@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())
{
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!");
}
}
Il s'agit de vérifier l'état et d'attribuer la langue au TTS pour une utilisation ultérieure. J'obtiens le toast comme "le bouton devrait fonctionner" mais il n'est pas activé. Pourquoi en est-il ainsi? Quel est le travail autour?
J'ai dans un fichier .xml,
<Button
Android:id="@+id/button1"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_width="200dp"
Android:enabled="false"
Android:text="@string/tts_text" />
Dois-je l'activer ici, puis le désactiver et l'activer lors de l'exécution ??
@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!");
}
}
Vous devez utiliser setClickable
btnSpeak.setClickable(true);
btnSpeak.setEnabled(true);
Utilisez également isEnabled()
pour vérifier l'état
//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();
}
Vérifiez que votre bouton est enfoncé ou non et écrivez votre code.
Exemple de code.
if(button2.isPressed()){
button2.setEnabled(false);
button1.setEnabled(true);
}
else if(button1.isPressed()){
button1.setEnabled(false);
button2.setEnabled(true);
}
J'espère que cela t'aidera.
Il est peut-être trop tard pour répondre et vous avez déjà trouvé une solution, mais vous pouvez utiliser invalidate pour forcer le bouton à se redessiner en fonction de son nouvel état:
btnSpeak.setEnabled(true);
btnSpeak.invalidate();
vous pouvez réaliser en désactivant et en activant la visibilité du bouton
voici un exemple
View button = findViewById(R.id.buttonid);
button.setVisibility(View.GONE);
Utiliser un seul écouteur 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;
}
}
});