2013-04-23 15 views
5

OK, więc mam dwa przyciski. Pierwszy to "Wczytaj tekst", a drugi to "Mów".Android: Włącz/wyłącz przycisk w Runtime?

Nie chcę, aby przycisk Mów był aktywny, gdy nie ma w nim tekstu.

Udało mi się ustawić wartość w EditText przez wczytanie przycisku onClickListener metody. Wewnątrz samej metody nazwałem,

btnSpeak.setEnabled(true); 

Mam zainicjowany to jako,

btnSpeak = (Button) findViewById(R.id.button1); 

Cały kodowanie jest

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

} 

To jest do sprawdzenia stanu i przypisać język TTS do dalszego wykorzystania. Otrzymuję toast za "Przycisk powinien działać", ale nie jest włączony. Dlaczego tak jest? O czym jest ta praca?

mam w pliku xml jak,

<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" /> 

powinienem mieć włączony to tutaj, a następnie wyłączyć i włączyć w czasie pracy ??

+0

Sprawdź, czy zainicjalizowałeś przycisk z poprawnym identyfikatorem – stinepike

+0

Tak, mam poprawny identyfikator. – iMan

Odpowiedz

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

} 
+0

To również nie działa.Jeśli zostawiam to wszystko i będę miał oba przyciski włączone, kiedy kliknę na drugi przycisk, nie otrzymam dźwięku, dlaczego tak się stanie? – iMan

+0

gdzie jest przycisk onclick methd? –

+1

spróbuj zaktualizowanego kodu powyżej będzie działać –

5

Musisz użyć setClickable

btnSpeak.setClickable(true); 
btnSpeak.setEnabled(true); 

także skorzystać isEnabled() sprawdzić stan

//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(); 
} 
+0

Przepraszam, użyłem isEnabled, popełniłem błąd podczas sprawdzania tutaj. Spróbuję jednak z klikalnością. – iMan

+0

Nie ma szczęścia, nie działa. Przycisk jest nadal szary. – iMan

+1

użyj setFocusuble (true) i setFocusubleInTouchmode (true) –

3

Sprawdź swoją przycisk jest wciśnięty czy nie i napisać kod.

Przykładowy kod.

if(button2.isPressed()){ 
button2.setEnabled(false); 
button1.setEnabled(true); 
} 
else if(button1.isPressed()){ 
button1.setEnabled(false); 
button2.setEnabled(true); 
} 

Mam nadzieję, że to ci pomoże.

+0

Niestety, to też nie działa. – iMan

1

można osiągnąć przez wyłączanie i włączanie widoczności przycisku

Oto przykład

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

Dziękuję, to działa. Chociaż wciąż zastanawiam się, dlaczego Enabled nie działał w środowisku wykonawczym, jeśli nie dostanę żadnego możliwego rozwiązania, wybrałbym twoją odpowiedź. Dziękuję raz jeszcze. – iMan

0

Użyj jednego słuchacza dla obu przycisków

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

może być zbyt późno na odpowiedź i już znalazłeś rozwiązanie, ale możesz użyć "unieważnij", aby wymusić ponowne wyrysowanie przycisku zgodnie z jego nowym stanem:

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