8

わかりました、ボタンが 2 つあります。1 つ目は「テキストの読み込み」で、2 つ目は「発言」です。

ここで、テキストがロードされていないときに [話す] ボタンをアクティブにしたくありません。

Load Text ボタンの 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" />

ここで有効にしてから、実行時に無効にして有効にする必要がありますか??

4

6 に答える 6

8

使用する必要があります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();
}
于 2013-04-23T11:59:36.270 に答える
3

回答するには遅すぎる可能性があり、既に解決策を見つけていますが、invalidate を使用して、新しい状態に従ってボタンを強制的に再描画することができます。

btnSpeak.setEnabled(true);
btnSpeak.invalidate();
于 2017-04-20T22:36:54.953 に答える
0

両方のボタンに 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;
        }
    }
});
于 2013-04-23T12:28:32.093 に答える