web-dev-qa-db-fra.com

Android: activer / désactiver un bouton dans le Runtime?

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 ??

8
iMan
@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!");
    }

}
13
MR. Kumar

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

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.

5
Gunaseelan

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();
3
Jesús Barrera

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);
1
Bucks

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