わかりましたので、2つのボタンがあります。 1つ目は「テキストの読み込み」、2つ目は「読み上げ」です。
ここで、テキストが読み込まれていないときに[読み上げ]ボタンをアクティブにしたくありません。
[テキストの読み込み]ボタンのonClickListenerメソッドで値をEditTextに設定できました。私が呼び出した同じメソッド内で、
btnSpeak.setEnabled(true);
これを次のように初期化しました:
btnSpeak = (Button) findViewById(R.id.button1);
コーディング全体は、
@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!");
}
}
これは、ステータスを確認し、さらに使用するためにTTSに言語を割り当てることです。 「ボタンは機能するはずです」とトーストが表示されますが、有効になりません。なぜそうなのですか?回避策は何ですか?
私は.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" />
ここで有効にしてから、実行時に無効にして有効にする必要がありますか?
@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!");
}
}
setClickable
を使用する必要があります
_btnSpeak.setClickable(true);
btnSpeak.setEnabled(true);
_
また、isEnabled()
を使用して状態を確認します
_//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();
}
_
ボタンが押されているかどうかを確認し、コードを記述します。
サンプルコード。
if(button2.isPressed()){
button2.setEnabled(false);
button1.setEnabled(true);
}
else if(button1.isPressed()){
button1.setEnabled(false);
button2.setEnabled(true);
}
これがお役に立てば幸いです。
答えるには遅すぎる可能性があり、すでに解決策を見つけましたが、無効化を使用して、ボタンを新しい状態に従って強制的に再描画させることができます。
btnSpeak.setEnabled(true);
btnSpeak.invalidate();
ボタンの表示を無効にしてから有効にすることで達成できます
ここに例があります
View button = findViewById(R.id.buttonid);
button.setVisibility(View.GONE);
両方のボタンに1つのリスナーを使用する
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;
}
}
});